de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager Class Reference

List of all members.

Detailed Description

This class defines the Peer Manager functionality.

Author:
Dragos Vingarzan vingarzan -at- fokus dot fraunhofer dot de

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< Peerpeers
 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.


Constructor & Destructor Documentation

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.

Parameters:
dp DiameterPeer containing the PeerManager.

Definition at line 70 of file PeerManager.java.

00071     {
00072         this.diameterPeer = dp;
00073         this.peers = new Vector<Peer>();
00074     }


Member Function Documentation

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.

Parameters:
fqdn Fully Qualified Domain Name of the Peer.
realm Realm name of a Peer.
port port number.
Returns:
The configured Peer.

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.

Parameters:
fqdn Fully Qualified Domain Name of a Peer.
Returns:
The Peer found, otherwise null.

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.

Parameters:
fqdn Fully Qualified Domain Name of a Peer.
realm Realm name of a Peer.
Returns:
The configured Peer, otherwise null.

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.

See also:
java.lang.Runnable.run()

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     }


Member Data Documentation

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 de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.diameterPeer

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().

Vector<Peer> de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.peers

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().


The documentation for this class was generated from the following file:
Generated on Tue Oct 14 04:04:20 2008 for Open IMS Core JavaDiameterPeer by  doxygen 1.5.2