Inheritance diagram for de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker:

Definition at line 46 of file TransactionWorker.java.
Public Member Functions | |
| TransactionWorker (DiameterPeer dp, long timeout, long checkInterval) | |
| Construct a TransactionWorker. | |
| boolean | sendRequestTransactional (String peerFQDN, DiameterMessage req, TransactionListener tl) |
| Sends a Diameter request. | |
| boolean | sendRequestTransactional (DiameterMessage req, TransactionListener tl) |
| Sends a Diameter request. | |
| DiameterMessage | sendRequestBlocking (String peerFQDN, DiameterMessage req) |
| Sends a Diameter request and blocks the thread until a Diameter answer returned or timeout. | |
| DiameterMessage | sendRequestBlocking (DiameterMessage req) |
| Sends a Diameter request and blocks the thread until a Diameter answer returned or timeout. | |
| void | recvMessage (String FQDN, DiameterMessage msg) |
| Handles the received Diameter answers. | |
| void | run () |
| Trigger transaction timeout event. | |
| void | shutdown () |
| Shutdown the TransactionLister. | |
Private Member Functions | |
| synchronized DiameterTransaction | addTransaction (DiameterMessage req, TransactionListener tl, boolean blocking) |
| synchronized DiameterTransaction | takeTransaction (DiameterMessage ans) |
| synchronized DiameterTransaction | getTransaction (DiameterMessage msg) |
| synchronized void | timeoutExpired (long now) |
Private Attributes | |
| Semaphore | sych = new Semaphore(0) |
| DiameterPeer | dp |
| Vector< DiameterTransaction > | transactions = new Vector<DiameterTransaction>() |
| long | timeout = 30000 |
| long | checkInterval = 1000 |
| boolean | running = true |
| de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.TransactionWorker | ( | DiameterPeer | dp, | |
| long | timeout, | |||
| long | checkInterval | |||
| ) |
Construct a TransactionWorker.
| dp | DiameterPeer creating the worker. | |
| timeout | Transaction timeout. | |
| checkInterval |
Definition at line 65 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.addEventListener(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.dp.
00066 { 00067 this.dp = dp; 00068 dp.addEventListener(this); 00069 this.timeout = timeout *1000; 00070 this.checkInterval = checkInterval*1000; 00071 this.start(); 00072 }
| synchronized DiameterTransaction de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.addTransaction | ( | DiameterMessage | req, | |
| TransactionListener | tl, | |||
| boolean | blocking | |||
| ) | [private] |
Definition at line 74 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.getTransaction(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.transactions.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional().
00075 { 00076 DiameterTransaction dt = getTransaction(req); 00077 if (dt!=null) return dt; 00078 dt = new DiameterTransaction(req,tl,blocking); 00079 transactions.add(dt); 00080 return dt; 00081 }
| synchronized DiameterTransaction de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.takeTransaction | ( | DiameterMessage | ans | ) | [private] |
Definition at line 83 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.endToEndID, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.hopByHopID, de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.request, and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.transactions.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.recvMessage(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional().
00084 { 00085 int i; 00086 DiameterTransaction dt; 00087 for(i=0;i<transactions.size();i++){ 00088 dt = transactions.get(i); 00089 if (dt.request.endToEndID == ans.endToEndID && 00090 dt.request.hopByHopID == ans.hopByHopID){ 00091 transactions.remove(i); 00092 return dt; 00093 } 00094 } 00095 return null; 00096 }
| synchronized DiameterTransaction de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.getTransaction | ( | DiameterMessage | msg | ) | [private] |
Definition at line 98 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.endToEndID, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.hopByHopID, de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.request, and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.transactions.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.addTransaction().
00099 { 00100 int i; 00101 DiameterTransaction dt; 00102 for(i=0;i<transactions.size();i++){ 00103 dt = transactions.get(i); 00104 if (dt.request.endToEndID == msg.endToEndID && 00105 dt.request.hopByHopID == msg.hopByHopID) 00106 return dt; 00107 } 00108 return null; 00109 }
| synchronized void de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.timeoutExpired | ( | long | now | ) | [private] |
Definition at line 111 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.expires, de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.request, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sych, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionListener.timeout(), de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.tl, and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.transactions.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.run().
00112 { 00113 int i; 00114 DiameterTransaction dt; 00115 for(i=0;i<transactions.size();i++){ 00116 dt = transactions.get(i); 00117 if (dt.expires<=now){ 00118 if (dt.tl!=null) dt.tl.timeout(dt.request); 00119 // synchronized(dt) { 00120 sych.release(); 00121 // dt.notifyAll(); 00122 // } 00123 transactions.remove(i); 00124 i--; 00125 } 00126 } 00127 00128 }
| boolean de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional | ( | String | peerFQDN, | |
| DiameterMessage | req, | |||
| TransactionListener | tl | |||
| ) |
Sends a Diameter request.
| peerFQDN | Destination host of peer. | |
| req | Diameter request to be sent. | |
| tl | TransactionListener that handles the corresponding Diameter answer within a transaction. |
Definition at line 139 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.addTransaction(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.dp, de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.expires, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.flagRequest, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.networkTime, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.takeTransaction().
Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestTransactional().
00140 { 00141 boolean sent=false; 00142 DiameterTransaction dt; 00143 if (!req.flagRequest) { 00144 System.err.println("DiameterTransaction:sendMessageTransactional() is only for Requests!"); 00145 return false; 00146 } 00147 dt = addTransaction(req,tl,false); 00148 sent = dp.sendMessage(peerFQDN,req); 00149 if (!sent){ 00150 takeTransaction(req); 00151 return false; 00152 } 00153 dt.expires = req.networkTime + this.timeout; 00154 00155 return sent; 00156 }
| boolean de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional | ( | DiameterMessage | req, | |
| TransactionListener | tl | |||
| ) |
Sends a Diameter request.
| req | Diameter request to be sent. | |
| tl | TransactionListener that handles the corresponding Diameter answer within a transaction. |
Definition at line 166 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.addTransaction(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.dp, de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.expires, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.flagRequest, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.networkTime, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.takeTransaction().
00167 { 00168 boolean sent=false; 00169 DiameterTransaction dt; 00170 if (!req.flagRequest) { 00171 System.err.println("DiameterTransaction:sendMessageTransactional() is only for Requests!"); 00172 return false; 00173 } 00174 dt = addTransaction(req,tl,false); 00175 sent = dp.sendMessage(req); 00176 if (!sent){ 00177 takeTransaction(req); 00178 return false; 00179 } 00180 dt.expires = req.networkTime + this.timeout; 00181 00182 return sent; 00183 }
| DiameterMessage de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking | ( | String | peerFQDN, | |
| DiameterMessage | req | |||
| ) |
Sends a Diameter request and blocks the thread until a Diameter answer returned or timeout.
| peerFQDN | Destination host of peer. | |
| req | Diameter request to be sent. |
Definition at line 194 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.addTransaction(), de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.answer, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.dp, de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.expires, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.flagRequest, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.networkTime, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sych, and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.takeTransaction().
Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendRequestBlocking().
00195 { 00196 boolean sent; 00197 DiameterTransaction dt; 00198 if (!req.flagRequest) { 00199 System.err.println("DiameterTransaction:sendMessageBlocking() is only for Requests!"); 00200 return null; 00201 } 00202 dt = addTransaction(req,null,true); 00203 sent = dp.sendMessage(peerFQDN,req); 00204 if (!sent){ 00205 takeTransaction(req); 00206 return null; 00207 } 00208 dt.expires = req.networkTime + this.timeout; 00209 try { 00210 // synchronized(dt) { 00211 sych.acquire(); 00212 // dt.wait(); 00213 // } 00214 } catch (InterruptedException e) { 00215 e.printStackTrace(); 00216 } 00217 00218 return dt.answer; 00219 }
| DiameterMessage de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking | ( | DiameterMessage | req | ) |
Sends a Diameter request and blocks the thread until a Diameter answer returned or timeout.
| req | Diameter request to be sent. |
Definition at line 228 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.addTransaction(), de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.answer, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.dp, de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.expires, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.flagRequest, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.networkTime, de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.sendMessage(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sych, and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.takeTransaction().
00229 { 00230 boolean sent; 00231 DiameterTransaction dt; 00232 if (!req.flagRequest) { 00233 System.err.println("DiameterTransaction:sendMessageBlocking() is only for Requests!"); 00234 return null; 00235 } 00236 dt = addTransaction(req,null,true); 00237 sent = dp.sendMessage(req); 00238 if (!sent){ 00239 takeTransaction(req); 00240 return null; 00241 } 00242 dt.expires = req.networkTime + this.timeout; 00243 try { 00244 // synchronized(dt) { 00245 sych.acquire(); 00246 // dt.wait(); 00247 // } 00248 } catch (InterruptedException e) { 00249 e.printStackTrace(); 00250 } 00251 00252 return dt.answer; 00253 }
| void de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.recvMessage | ( | String | FQDN, | |
| DiameterMessage | msg | |||
| ) | [virtual] |
Handles the received Diameter answers.
They will be handled by corresponding TransactionListeners.
| FQDN | FQDN of the origin host. | |
| msg | Received Diameter message. |
Implements de.fhg.fokus.diameter.DiameterPeer.EventListener.
Definition at line 262 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.answer, de.fhg.fokus.diameter.DiameterPeer.data.DiameterMessage.flagRequest, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionListener.receiveAnswer(), de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.request, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sych, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.takeTransaction(), and de.fhg.fokus.diameter.DiameterPeer.transaction.DiameterTransaction.tl.
00263 { 00264 if (msg.flagRequest) return; 00265 DiameterTransaction dt; 00266 dt = takeTransaction(msg); 00267 if (dt==null) return; 00268 dt.answer = msg; 00269 // synchronized(dt) { 00270 sych.release(); 00271 // dt.notifyAll(); 00272 // } 00273 if (dt.tl!=null) dt.tl.receiveAnswer(FQDN,dt.request,msg); 00274 }
| void de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.run | ( | ) |
Trigger transaction timeout event.
Definition at line 279 of file TransactionWorker.java.
References de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.checkInterval, de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.running, and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.timeoutExpired().
00280 { 00281 while(running){ 00282 timeoutExpired(System.currentTimeMillis()); 00283 try { 00284 Thread.sleep(checkInterval); 00285 } catch (InterruptedException e) { 00286 e.printStackTrace(); 00287 } 00288 } 00289 }
| void de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.shutdown | ( | ) |
Shutdown the TransactionLister.
Definition at line 296 of file TransactionWorker.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.DiameterPeer.shutdown().
Semaphore de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sych = new Semaphore(0) [private] |
Definition at line 48 of file TransactionWorker.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.recvMessage(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.timeoutExpired().
Definition at line 50 of file TransactionWorker.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestBlocking(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.sendRequestTransactional(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.TransactionWorker().
Vector<DiameterTransaction> de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.transactions = new Vector<DiameterTransaction>() [private] |
Definition at line 52 of file TransactionWorker.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.addTransaction(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.getTransaction(), de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.takeTransaction(), and de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.timeoutExpired().
long de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.timeout = 30000 [private] |
Definition at line 54 of file TransactionWorker.java.
long de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.checkInterval = 1000 [private] |
Definition at line 55 of file TransactionWorker.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.run().
boolean de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.running = true [private] |
Definition at line 56 of file TransactionWorker.java.
Referenced by de.fhg.fokus.diameter.DiameterPeer.transaction.TransactionWorker.run().
1.5.2