Definition at line 46 of file PeerManager.java.
Public Member Functions | |
| PeerManager (DiameterPeer dp) | |
| Constructor a PeerManager for a DiameterPeer. | |
| Peer | configurePeer (String fqdn, String realm, int port) |
| Configure a Peer according to the configuration parameters in a configure file and add it to the Peer list. | |
| Peer | getPeerByFQDN (String fqdn) |
| Search for a Peer in the Peer list according to its FQDN. | |
| Peer | addDynamicPeer (String fqdn, String realm) |
| Add Peers detected dynamicly to the Peer list, if it is allowed. | |
| void | run () |
| PeerManager thread maintains Peers in the Peer list. | |
| void | shutdown () |
| Shut down the PeerManager. | |
Public Attributes | |
| DiameterPeer | diameterPeer |
| DiameterPeer API reference. | |
| Vector< Peer > | peers |
| List of peers. | |
| boolean | running = true |
| if it is watching peers for activity | |
Static Private Attributes | |
| static final Logger | LOGGER = Logger.getLogger(PeerManager.class) |
| The logger. | |
| de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.PeerManager | ( | DiameterPeer | dp | ) |
Constructor a PeerManager for a DiameterPeer.
A PeerManager managers peers, to which this DiameterPeer maintains connections. The number of peers maintained by the PeerManager can be configured in a configure file. New detected peers during a CER/CEA procedure can also be managed by this class, if tag AcceptUnknownPeers is > 0.
| dp | DiameterPeer containing the PeerManager. |
Definition at line 70 of file PeerManager.java.
| Peer de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.configurePeer | ( | String | fqdn, | |
| String | realm, | |||
| int | port | |||
| ) |
Configure a Peer according to the configuration parameters in a configure file and add it to the Peer list.
| fqdn | Fully Qualified Domain Name of the Peer. | |
| realm | Realm name of a Peer. | |
| port | port number. |
Definition at line 87 of file PeerManager.java.
References de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.diameterPeer, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.diameterPeer, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.lastReceiveTime, de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.LOGGER, de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.peers, and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Tc.
Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.addDynamicPeer(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.configure().
00088 { 00089 Peer p; 00090 p = new Peer(fqdn,realm,port); 00091 p.diameterPeer = this.diameterPeer; 00092 p.lastReceiveTime = System.currentTimeMillis() - (diameterPeer.Tc*1000); 00093 LOGGER.debug("PeerManager: Peer "+fqdn+":"+port+" added."); 00094 peers.add(p); 00095 return p; 00096 }
| Peer de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.getPeerByFQDN | ( | String | fqdn | ) |
Search for a Peer in the Peer list according to its FQDN.
| fqdn | Fully Qualified Domain Name of a Peer. |
Definition at line 104 of file PeerManager.java.
References de.fhg.fokus.diameter.DiameterPeer.peer.Peer.FQDN, and de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.peers.
Referenced by de.fhg.fokus.diameter.DiameterPeer.routing.RoutingEngine.getRoute(), de.fhg.fokus.diameter.DiameterPeer.transport.Communicator.processMessage(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage().
00105 { 00106 Peer p; 00107 // 00108 // Iterator i = peers.iterator(); 00109 // while(i.hasNext()){ 00110 // p = (Peer) i.next(); 00111 // if (p.FQDN.equalsIgnoreCase(fqdn)) 00112 // return p; 00113 // } 00114 for(int i=0;i<peers.size();i++){ 00115 p = peers.get(i); 00116 if (p.FQDN.equalsIgnoreCase(fqdn)) 00117 return p; 00118 } 00119 return null; 00120 }
| Peer de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.addDynamicPeer | ( | String | fqdn, | |
| String | realm | |||
| ) |
Add Peers detected dynamicly to the Peer list, if it is allowed.
Definition at line 130 of file PeerManager.java.
References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.AcceptUnknownPeers, de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.configurePeer(), de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.diameterPeer, and de.fhg.fokus.diameter.DiameterPeer.peer.Peer.isDynamicPeer.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transport.Communicator.processMessage().
00131 { 00132 Peer p; 00133 if (!diameterPeer.AcceptUnknownPeers) { 00134 System.err.println("PeerManager: Sorry "+fqdn+" but we don't accept unknown peers."); 00135 return null; 00136 } 00137 //TODO check if it exists already 00138 00139 p = configurePeer(fqdn,realm,3868); 00140 p.isDynamicPeer = true; 00141 return p; 00142 }
| void de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.run | ( | ) |
PeerManager thread maintains Peers in the Peer list.
Definition at line 151 of file PeerManager.java.
References de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.diameterPeer, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DropUnknownOnDisconnect, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.FQDN, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.isDynamicPeer, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.lastReceiveTime, de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.LOGGER, de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.peers, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.refreshTimer(), de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.running, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.state, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Tc, and de.fhg.fokus.diameter.DiameterPeer.peer.Peer.waitingDWA.
00152 { 00153 int i; 00154 Peer p; 00155 long expiration; 00156 running = true; 00157 while (running){ 00158 expiration = System.currentTimeMillis() - (diameterPeer.Tc*1000); 00159 00160 // LOGGER.debug("-Peer list-"); 00161 // for(i=0;i<peers.size();i++){ 00162 // p = (Peer) peers.get(i); 00163 // LOGGER.debug("Peer State:"+p.state+" FQDN:"+p.FQDN); 00164 // } 00165 // LOGGER.debug("-----------"); 00166 for(i=0;i<peers.size();i++){ 00167 p = (Peer) peers.get(i); 00168 if (p.lastReceiveTime<expiration){ 00169 switch (p.state){ 00170 /* initiating connection */ 00171 case StateMachine.Closed: 00172 if (p.isDynamicPeer && diameterPeer.DropUnknownOnDisconnect){ 00173 peers.remove(i); 00174 i--; 00175 break; 00176 } 00177 LOGGER.debug("Connecting to peer "+p.FQDN+" dynamic "+p.isDynamicPeer+" dropping "+ diameterPeer.DropUnknownOnDisconnect); 00178 p.refreshTimer(); 00179 StateMachine.process(p,StateMachine.Start); 00180 break; 00181 /* timeouts */ 00182 case StateMachine.Wait_Conn_Ack: 00183 case StateMachine.Wait_I_CEA: 00184 case StateMachine.Closing: 00185 case StateMachine.Wait_Returns: 00186 p.refreshTimer(); 00187 StateMachine.process(p,StateMachine.Timeout,null); 00188 break; 00189 /* inactivity detected */ 00190 case StateMachine.I_Open: 00191 case StateMachine.R_Open: 00192 if (p.waitingDWA){ 00193 p.waitingDWA = false; 00194 if (p.state==StateMachine.I_Open) StateMachine.process(p,StateMachine.I_Peer_Disc); 00195 if (p.state==StateMachine.R_Open) StateMachine.process(p,StateMachine.R_Peer_Disc); 00196 } else { 00197 p.waitingDWA = true; 00198 if (!StateMachine.Snd_DWR(p)){ 00199 if (p.state==StateMachine.I_Open) StateMachine.process(p,StateMachine.I_Peer_Disc); 00200 if (p.state==StateMachine.R_Open) StateMachine.process(p,StateMachine.R_Peer_Disc); 00201 } else p.refreshTimer(); 00202 } 00203 break; 00204 /* ignored states */ 00205 /* unknown states */ 00206 default: 00207 System.err.println("PeerManager: Peer "+p.FQDN+" inactive in state "+p.state); 00208 } 00209 } 00210 } 00211 try { 00212 Thread.sleep(1000); 00213 } catch (InterruptedException e) { } 00214 } 00215 }
| void de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.shutdown | ( | ) |
Shut down the PeerManager.
Definition at line 222 of file PeerManager.java.
References de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.peers.
Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.shutdown().
00223 { 00224 Iterator i; 00225 Peer p; 00226 this.running = false; 00227 i = peers.iterator(); 00228 while(i.hasNext()){ 00229 p = (Peer) i.next(); 00230 // if (p.I_comm!=null) p.I_comm.shutdown(); 00231 // if (p.R_comm!=null) p.R_comm.shutdown(); 00232 StateMachine.process(p,StateMachine.Stop); 00233 } 00234 }
final Logger de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.LOGGER = Logger.getLogger(PeerManager.class) [static, private] |
The logger.
Definition at line 49 of file PeerManager.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.configurePeer(), and de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.run().
DiameterPeer API reference.
Definition at line 52 of file PeerManager.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.addDynamicPeer(), de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.configurePeer(), and de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.run().
List of peers.
Definition at line 55 of file PeerManager.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.configurePeer(), de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.getPeerByFQDN(), de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.run(), and de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.shutdown().
| boolean de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.running = true |
if it is watching peers for activity
Definition at line 58 of file PeerManager.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.run().
1.5.2