de.fhg.fokus.diameter.DiameterPeer.DiameterPeer 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 90 of file DiameterPeer.java.

Public Member Functions

synchronized int getNextHopByHopId ()
 Generates Hop-by-Hop id.
synchronized int getNextEndToEndId ()
 Generates End-to-End id.
 DiameterPeer (String xml)
 Construct a DiameterPeer based on a configuration file.
void enableTransactions (long timeout, long checkInterval)
 Bundles Diameter request and answer to a transaction.
DiameterMessage newRequest (int command_code, int application_id)
 Creates a new Diameter request with proxiable bit set.
DiameterMessage newRequest (int command_code, boolean Proxiable, int application_id)
 Creates a new Diameter request.
DiameterMessage newResponse (DiameterMessage request)
 Creates a new Diameter answer.
boolean sendMessage (String peerFQDN, DiameterMessage msg)
 Sends a Diameter message to the designated peer.
boolean sendMessage (DiameterMessage msg)
 Sends a Diameter message to a realm routed peer.
boolean sendRequestTransactional (String peerFQDN, DiameterMessage req, TransactionListener tl)
 Sends a Diameter request and a TransactionWorker handles the answer.
boolean sendRequestTransactional (DiameterMessage req, TransactionListener tl)
 Sends a Diameter request and a TransactionWorker handles the answer.
DiameterMessage sendRequestBlocking (String peerFQDN, DiameterMessage req)
 Sends a Diameter message to the designated peer.
DiameterMessage sendRequestBlocking (DiameterMessage req)
 Sends a Diameter message to a realm routing determined peer.
void addEventListener (EventListener l)
 Adds an EventListener.
void removeEventListener (EventListener l)
 Removes an EventListener.
void shutdown ()
 Deactives the DiameterPeer.

Public Attributes

String FQDN
 FQDN of itself.
String Realm
 Realm of itself.
int Vendor_Id
 Vendor id of itself.
String Product_Name
 Product Name of itself.
int Tc
 Tc timer value - interval to attempt peer reconnect.
Vector< Acceptoracceptors
 Accepting sockets.
boolean AcceptUnknownPeers
 If unknown (unconfigured) peers are allowed to connect.
boolean DropUnknownOnDisconnect
 If to delete unknown peers after they disconnect.
Vector< ApplicationAuthApp
 Supported Applications.
Vector< ApplicationAcctApp
RoutingEngine routingTable = null
 Routing Engine.
PeerManager peerManager
 PeerManger manages connection with other Diameter peers.
Vector< EventListenereventListeners
 Sevice must define new eventListeners in order to process received Diameter answers.
int queueLength
 Received Queue Max Length.
ArrayBlockingQueue< DiameterTaskqueueTasks
 Received Messages queue.
int workerCount = 1
 The number of workers that process DiameterTasks from the taks queue.
int hopbyhop_id = 0
 Hop-by-Hop identifier.
int endtoend_id = 0
 End-to-End identifier.

Package Attributes

Document config
 Configuration DOM.

Private Member Functions

boolean readConfig (String cfgFile)
void initRoutingTable (Document config)
void startWorkers ()

Private Attributes

DiameterWorker workers []
 workers for running the event listeners
TransactionWorker transactionWorker = null
 transaction worker

Static Private Attributes

static final Logger LOGGER = Logger.getLogger(DiameterPeer.class)
 The logger.


Constructor & Destructor Documentation

de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer ( String  xml  ) 

Construct a DiameterPeer based on a configuration file.

Parameters:
xml Configuration file.

Definition at line 174 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.acceptors, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.AcceptUnknownPeers, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.config, de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.configurePeer(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DropUnknownOnDisconnect, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.endtoend_id, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.eventListeners, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.FQDN, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.hopbyhop_id, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.initRoutingTable(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.peerManager, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Product_Name, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.queueLength, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.queueTasks, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.readConfig(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Realm, de.fhg.fokus.diameter.DiameterPeer.transport.Acceptor.startAccepting(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.startWorkers(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Tc, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Vendor_Id, and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.workerCount.

00175     {
00176         Acceptor acc;
00177         NodeList nl;
00178         Node n,nv;
00179         int port,app_id,vendor_id;
00180         InetAddress addr;
00181         String fqdn,realm;
00182         Application app;
00183         
00184         eventListeners = new Vector<EventListener>();
00185         
00186         java.util.Random rand = new java.util.Random();
00187         hopbyhop_id = rand.nextInt();
00188         endtoend_id = ((int) (System.currentTimeMillis()&0xFFF))<<20;
00189         endtoend_id |= rand.nextInt() & 0xFFFFF;
00190     
00191         /* parse the config */
00192         if (!readConfig(xml)) {
00193             LOGGER.error("DiameterPeer: Error parsing config file");
00194             return;
00195         }
00196         FQDN = config.getDocumentElement().getAttribute("FQDN");
00197         LOGGER.info("FQDN: " + config.getDocumentElement().getAttribute("FQDN"));
00198         Realm = config.getDocumentElement().getAttribute("Realm");
00199         LOGGER.info("Realm: " + config.getDocumentElement().getAttribute("Realm"));
00200         Vendor_Id = Integer.parseInt(config.getDocumentElement().getAttribute("Vendor_Id"));
00201         LOGGER.info("Vendor_ID : " + Integer.parseInt(config.getDocumentElement().getAttribute("Vendor_Id")));
00202         Product_Name = config.getDocumentElement().getAttribute("Product_Name");
00203         LOGGER.info("Product Name: " + config.getDocumentElement().getAttribute("Product_Name"));
00204         AcceptUnknownPeers = Integer.parseInt(config.getDocumentElement().getAttribute("AcceptUnknownPeers"))!=0;
00205         LOGGER.info("AcceptUnknwonPeers: " + AcceptUnknownPeers);
00206         DropUnknownOnDisconnect = Integer.parseInt(config.getDocumentElement().getAttribute("DropUnknownOnDisconnect"))!=0;
00207         LOGGER.info("DropUnknownOnDisconnect: " + DropUnknownOnDisconnect);
00208         
00209         Tc = Integer.parseInt(config.getDocumentElement().getAttribute("Tc"));
00210         workerCount = Integer.parseInt(config.getDocumentElement().getAttribute("Workers"));
00211         queueLength = Integer.parseInt(config.getDocumentElement().getAttribute("QueueLength"));
00212         
00213         queueTasks = new ArrayBlockingQueue<DiameterTask>(queueLength,true);
00214         
00215         startWorkers();
00216         
00217         /* Read Supported Application ids */
00218         this.AuthApp = new Vector<Application>();
00219         this.AcctApp = new Vector<Application>();
00220         nl = config.getDocumentElement().getElementsByTagName("Auth");
00221         for(int i=0;i<nl.getLength();i++){
00222             n = nl.item(i);
00223             app_id = 0;
00224             app_id = Integer.parseInt(n.getAttributes().getNamedItem("id").getNodeValue());
00225             vendor_id=0;
00226             if (n.getAttributes().getNamedItem("vendor")!=null)
00227                 vendor_id = Integer.parseInt(n.getAttributes().getNamedItem("vendor").getNodeValue());
00228             
00229             app = new Application(app_id,vendor_id,Application.Auth);
00230             this.AuthApp.add(app);
00231         }
00232         nl = config.getDocumentElement().getElementsByTagName("Acct");
00233         for(int i=0;i<nl.getLength();i++){
00234             n = nl.item(i);
00235             app_id = 0;
00236             app_id = Integer.parseInt(n.getAttributes().getNamedItem("id").getNodeValue());
00237             vendor_id=0;
00238             if (n.getAttributes().getNamedItem("vendor")!=null)
00239                 vendor_id = Integer.parseInt(n.getAttributes().getNamedItem("vendor").getNodeValue());
00240             
00241             app = new Application(app_id,vendor_id,Application.Acct);
00242             this.AcctApp.add(app);
00243         }
00244         /* Initialize the Peer Manager */
00245         peerManager = new PeerManager(this);
00246         
00247         /* Read the peers from the configuration file */
00248         nl = config.getDocumentElement().getElementsByTagName("Peer");
00249         for(int i=0;i<nl.getLength();i++){
00250             n = nl.item(i);
00251  
00252             fqdn = n.getAttributes().getNamedItem("FQDN").getNodeValue();
00253             
00254             realm = n.getAttributes().getNamedItem("Realm").getNodeValue(); 
00255             
00256             port = 3868;
00257             nv = n.getAttributes().getNamedItem("port");
00258             if (nv==null) port = 3868;
00259             else port = Integer.parseInt(nv.getNodeValue());
00260                 
00261             peerManager.configurePeer(fqdn,realm,port);
00262         }
00263         
00264         /* Create & start connection acceptors */
00265         acceptors = new Vector<Acceptor>();
00266         nl = config.getDocumentElement().getElementsByTagName("Acceptor");
00267         for(int i=0;i<nl.getLength();i++){
00268             n = nl.item(i);
00269             
00270             port = 3868;
00271             nv = n.getAttributes().getNamedItem("port");
00272             if (nv==null) port = 3868;
00273             else port = Integer.parseInt(nv.getNodeValue());
00274             
00275             addr = null;
00276             nv = n.getAttributes().getNamedItem("bind");
00277             if (nv !=null && nv.getNodeValue().length()!=0  )               
00278                 try {
00279                     addr = InetAddress.getByName(nv.getNodeValue());
00280                 } catch (UnknownHostException e) {
00281                     LOGGER.error("DiameterPeer: Can not resolve "+nv.getNodeValue());
00282                     e.printStackTrace();
00283                     continue;
00284                 } 
00285             acc = new Acceptor(port,addr,this);
00286             acc.startAccepting();
00287             acceptors.add(acc);
00288         }
00289         
00290         initRoutingTable(config);
00291 
00292         peerManager.start();
00293         
00294     }


Member Function Documentation

synchronized int de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.getNextHopByHopId (  ) 

Generates Hop-by-Hop id.

Definition at line 159 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.hopbyhop_id.

Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.I_Snd_CER(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newRequest(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DPR(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DWR().

00160     {
00161         return ++hopbyhop_id;
00162     }

synchronized int de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.getNextEndToEndId (  ) 

Generates End-to-End id.

Definition at line 164 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.endtoend_id.

Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.I_Snd_CER(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newRequest(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DPR(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DWR().

00165     {
00166         return ++endtoend_id;
00167     }

boolean de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.readConfig ( String  cfgFile  )  [private]

Definition at line 296 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.config.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer().

00297     {
00298         DocumentBuilderFactory factory =
00299             DocumentBuilderFactory.newInstance();
00300         //factory.setValidating(true);   
00301         //factory.setNamespaceAware(true);
00302         try {
00303            DocumentBuilder builder = factory.newDocumentBuilder();
00304            config = builder.parse( cfgFile );
00305         } catch (SAXException sxe) {
00306            // Error generated during parsing)
00307            Exception  x = sxe;
00308            if (sxe.getException() != null)
00309                x = sxe.getException();
00310            x.printStackTrace();
00311            return false;
00312         } catch (ParserConfigurationException pce) {
00313             // Parser with specified options can't be built
00314             pce.printStackTrace();
00315             return false;
00316         } catch (IOException ioe) {
00317            // I/O error
00318            ioe.printStackTrace();
00319            return false;
00320         }
00321         return true;
00322     }

void de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.initRoutingTable ( Document  config  )  [private]

Definition at line 325 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.routing.RoutingEngine.addDefaultRoute(), de.fhg.fokus.diameter.DiameterPeer.routing.RoutingEngine.addRealmRoute(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.routingTable.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer().

00325                                                    {        
00326         NodeList nl, nlc;
00327         String fqdn,realm;
00328         int metric;
00329         
00330         this.routingTable = new RoutingEngine();
00331         nl = config.getDocumentElement().getElementsByTagName("DefaultRoute");
00332         for(int i=0;i<nl.getLength();i++){
00333             fqdn = nl.item(i).getAttributes().getNamedItem("FQDN").getNodeValue();
00334             metric = Integer.valueOf(nl.item(i).getAttributes().getNamedItem("metric").getNodeValue());
00335             routingTable.addDefaultRoute(fqdn, metric);
00336         }
00337         nl = config.getDocumentElement().getElementsByTagName("Realm");
00338         for(int i=0;i<nl.getLength();i++){
00339             realm = nl.item(i).getAttributes().getNamedItem("name").getNodeValue();
00340             nlc = nl.item(i).getChildNodes();
00341             for(int j=0;j<nlc.getLength();j++)
00342                 if (nlc.item(j).getNodeName().equalsIgnoreCase("Route")){
00343                     fqdn = nlc.item(j).getAttributes().getNamedItem("FQDN").getNodeValue();
00344                     metric = Integer.valueOf(nlc.item(j).getAttributes().getNamedItem("metric").getNodeValue());
00345                     routingTable.addRealmRoute(realm, fqdn, metric);
00346                 }
00347         }
00348          
00349     }

void de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.startWorkers (  )  [private]

Definition at line 352 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.queueTasks, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.workerCount, and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.workers.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer().

00353     {
00354         workers = new DiameterWorker[workerCount];
00355         for(int i=0;i<workerCount;i++)
00356             workers[i] = new DiameterWorker(i,this.queueTasks);
00357     }

void de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.enableTransactions ( long  timeout,
long  checkInterval 
)

Bundles Diameter request and answer to a transaction.

Parameters:
timeout Lifetime of a transaction.
checkInterval 

Definition at line 365 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.transactionWorker.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeerTest.test().

00366     {
00367         if (this.transactionWorker == null)
00368             this.transactionWorker = new TransactionWorker(this,timeout,checkInterval);
00369     }

DiameterMessage de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newRequest ( int  command_code,
int  application_id 
)

Creates a new Diameter request with proxiable bit set.

Parameters:
command_code Command code of the request.
application_id Application id in the message header.
Returns:
Created Diameter request.

Definition at line 380 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeerTest.UAR().

00381     {
00382         return newRequest(command_code, true, application_id);
00383     }

DiameterMessage de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newRequest ( int  command_code,
boolean  Proxiable,
int  application_id 
)

Creates a new Diameter request.

Parameters:
command_code Command code of the request.
Proxiable Proxiable is set if true.
application_id Application id in the message header.
Returns:
Created Diameter request.

Definition at line 395 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.addAVP(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.FQDN, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.getNextEndToEndId(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.getNextHopByHopId(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Realm, and de.fhg.fokus.diameter.DiameterPeer.data.AVP.setData().

00397     {
00398         DiameterMessage msg = new DiameterMessage(command_code, 
00399                                                   true, 
00400                                                   Proxiable, 
00401                                                   application_id, 
00402                                                   this.getNextHopByHopId(), 
00403                                                   this.getNextEndToEndId());
00404         AVP avp;
00405         
00406         avp = new AVP(AVP.Origin_Host,true,0);
00407         avp.setData(this.FQDN);
00408         msg.addAVP(avp);
00409         
00410         avp = new AVP(AVP.Origin_Realm,true,0);
00411         avp.setData(this.Realm);
00412         msg.addAVP(avp);
00413 
00414         return msg;
00415     }

DiameterMessage de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newResponse ( DiameterMessage  request  ) 

Creates a new Diameter answer.

Parameters:
request Diameter request.
Returns:
Diameter anwer; null, if fails.

Definition at line 425 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.addAVP(), de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.applicationID, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.commandCode, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.endToEndID, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.FQDN, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.getSessionId(), de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.hopByHopID, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Realm, and de.fhg.fokus.diameter.DiameterPeer.data.AVP.setData().

Referenced by de.fhg.fokus.diameter.DiameterPeer.TestEventListener.recvMessage().

00426     {
00427         DiameterMessage msg = new DiameterMessage(request.commandCode,false,request.applicationID);
00428         AVP avp;
00429         
00430         msg.endToEndID = request.endToEndID;
00431         msg.hopByHopID = request.hopByHopID;
00432         
00433         if (request.getSessionId() != null) {
00434             avp = request.getSessionId();
00435             msg.addAVP(avp);
00436         }
00437         
00438         avp = new AVP(AVP.Origin_Host,true,0);
00439         avp.setData(this.FQDN);
00440         msg.addAVP(avp);
00441         
00442         avp = new AVP(AVP.Origin_Realm,true,0);
00443         avp.setData(this.Realm);
00444         msg.addAVP(avp);
00445         
00446         
00447         return msg;
00448     }

boolean de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage ( String  peerFQDN,
DiameterMessage  msg 
)

Sends a Diameter message to the designated peer.

Parameters:
peerFQDN FQDN of the designated peer.
msg Diameter message should be sent.
Returns:
true, if the message is sent successfully.

Definition at line 457 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.getPeerByFQDN(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.peerManager, de.fhg.fokus.diameter.DiameterPeer.peer.Peer.sendMessage(), and de.fhg.fokus.diameter.DiameterPeer.peer.Peer.state.

Referenced by de.fhg.fokus.diameter.DiameterPeer.TestEventListener.recvMessage(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional().

00458     {
00459         Peer p;
00460         p = peerManager.getPeerByFQDN(peerFQDN);
00461         if (p==null){
00462             LOGGER.error("DiameterPeer: Peer "+peerFQDN+" not found in peer list.");
00463             return false;
00464         }
00465         if (p.state!=StateMachine.I_Open &&
00466             p.state!=StateMachine.R_Open){
00467             LOGGER.error("DiameterPeer: Peer "+peerFQDN+" not connected.");
00468             return false;
00469         }
00470         return p.sendMessage(msg);
00471     }

boolean de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage ( DiameterMessage  msg  ) 

Sends a Diameter message to a realm routed peer.

Parameters:
msg Diameter message should be sent.
Returns:
true, if the message is sent successfully.

Definition at line 479 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.routing.RoutingEngine.getRoute(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.peerManager, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.routingTable, and de.fhg.fokus.diameter.DiameterPeer.peer.Peer.sendMessage().

00480     {
00481         Peer p;
00482         if (routingTable==null){
00483             LOGGER.error("DiameterPeer: RoutingTable not initialized!");
00484             return false;
00485         }
00486         p = routingTable.getRoute(msg,peerManager);
00487         if (p==null){
00488             LOGGER.error("DiameterPeer: No suitable peer to route to could be found.");
00489             return false;
00490         }
00491         return p.sendMessage(msg);
00492     }

boolean de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestTransactional ( String  peerFQDN,
DiameterMessage  req,
TransactionListener  tl 
)

Sends a Diameter request and a TransactionWorker handles the answer.

Parameters:
peerFQDN FQDN of the peer.
req Diameter request.
tl TransactionListener.
Returns:
true of a message is sent successfully, otherwise false.

Definition at line 502 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.transactionWorker.

00503     {
00504         if (this.transactionWorker!=null) return transactionWorker.sendRequestTransactional(peerFQDN,req,tl);
00505         else {
00506             LOGGER.error("DiameterPeer:sendRequestTransactional(): Transactions are not enabled on this peer!");
00507             return false;
00508         }
00509     }

boolean de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestTransactional ( DiameterMessage  req,
TransactionListener  tl 
)

Sends a Diameter request and a TransactionWorker handles the answer.

Parameters:
req Diameter request.
tl TransactionListener.
Returns:
true of a message is sent successfully, otherwise false.

Definition at line 518 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.transactionWorker.

00519     {
00520         if (this.transactionWorker!=null) return transactionWorker.sendRequestTransactional(req,tl);
00521         else {
00522             LOGGER.error("DiameterPeer:sendRequestTransactional(): Transactions are not enabled on this peer!");
00523             return false;
00524         }
00525     }

DiameterMessage de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestBlocking ( String  peerFQDN,
DiameterMessage  req 
)

Sends a Diameter message to the designated peer.

The thread will wait for a Diameter answer until it arrives or timeout.

Parameters:
peerFQDN FQDN of the designated peer.
req Diameter message should be sent.
Returns:
The Diameter answer returned. Null if timeout.

Definition at line 535 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.transactionWorker.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeerTest.test().

00536     {
00537         if (this.transactionWorker!=null) return transactionWorker.sendRequestBlocking(peerFQDN,req);
00538         else {
00539             LOGGER.error("DiameterPeer:sendRequestBlocking(): Transactions are not enabled on this peer!");
00540             return null;
00541         }
00542     }

DiameterMessage de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestBlocking ( DiameterMessage  req  ) 

Sends a Diameter message to a realm routing determined peer.

The thread will wait for a Diameter answer until it arrives or timeout.

Parameters:
req Diameter message should be sent.
Returns:
The Diameter answer returned. Null if timeout.

Definition at line 551 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.transactionWorker.

00552     {
00553         if (this.transactionWorker!=null) return transactionWorker.sendRequestBlocking(req);
00554         else {
00555             LOGGER.error("DiameterPeer:sendRequestBlocking(): Transactions are not enabled on this peer!");
00556             return null;
00557         }
00558     }

void de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.addEventListener ( EventListener  l  ) 

Adds an EventListener.

Parameters:
l EventListener added.

Definition at line 566 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.eventListeners.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeerTest.test(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.TransactionWorker().

00567     {
00568         eventListeners.add(l);
00569     }

void de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.removeEventListener ( EventListener  l  ) 

Removes an EventListener.

Parameters:
l EventListener removed.

Definition at line 577 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.eventListeners.

00578     {
00579         eventListeners.remove(l);
00580     }

void de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.shutdown (  ) 

Deactives the DiameterPeer.

Definition at line 585 of file DiameterPeer.java.

References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.acceptors, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.peerManager, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.shutdown(), de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.shutdown(), de.fhg.fokus.diameter.DiameterPeer.transport.Acceptor.stopAccepting(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.transactionWorker, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.workerCount, and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.workers.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeerTest.test().

00586     {
00587         Acceptor acc;
00588         Iterator<Acceptor> i = acceptors.iterator();
00589         while(i.hasNext()){
00590             acc = i.next();
00591             acc.stopAccepting();
00592         }
00593         peerManager.shutdown();
00594         for(int j=0;j<workerCount;j++)
00595             workers[j].shutdown();
00596         if (transactionWorker!=null) transactionWorker.shutdown();
00597     }


Member Data Documentation

final Logger de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.LOGGER = Logger.getLogger(DiameterPeer.class) [static, private]

The logger.

Definition at line 93 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestBlocking(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestTransactional().

String de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.FQDN

FQDN of itself.

Definition at line 96 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Elect(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.I_Snd_CER(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newRequest(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newResponse(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_CEA(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DPA(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DPR(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DWA(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DWR().

String de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Realm

Realm of itself.

Definition at line 99 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.I_Snd_CER(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newRequest(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.newResponse(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_CEA(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DPA(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DPR(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DWA(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_DWR().

int de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Vendor_Id

Vendor id of itself.

Definition at line 102 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.I_Snd_CER(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_CEA().

String de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Product_Name

Product Name of itself.

Definition at line 105 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.I_Snd_CER(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_CEA().

int de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.Tc

Tc timer value - interval to attempt peer reconnect.

Definition at line 108 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.configurePeer(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), and de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.run().

Vector<Acceptor> de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.acceptors

Accepting sockets.

Definition at line 111 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.shutdown().

boolean de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.AcceptUnknownPeers

If unknown (unconfigured) peers are allowed to connect.

Definition at line 114 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.addDynamicPeer(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer().

boolean de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DropUnknownOnDisconnect

If to delete unknown peers after they disconnect.

Definition at line 117 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), and de.fhg.fokus.diameter.DiameterPeer.peer.PeerManager.run().

Vector<Application> de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.AuthApp

Supported Applications.

Definition at line 120 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Process_CER(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_CE_add_applications().

Vector<Application> de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.AcctApp

Definition at line 120 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Process_CER(), and de.fhg.fokus.diameter.DiameterPeer.peer.StateMachine.Snd_CE_add_applications().

RoutingEngine de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.routingTable = null

Routing Engine.

Definition at line 123 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.initRoutingTable(), and de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage().

PeerManager de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.peerManager

PeerManger manages connection with other Diameter peers.

Definition at line 126 of file DiameterPeer.java.

Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.DiameterPeer(), de.fhg.fokus.diameter.DiameterPeer.transport.Communicator.processMessage(), de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage(), a