package org.umu.cops.ospep;\r
\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.umu.cops.stack.*;\r
+\r
import java.io.IOException;\r
import java.net.Socket;\r
-import java.util.Date;\r
-import java.util.Enumeration;\r
-import java.util.Hashtable;\r
-import java.util.Vector;\r
-\r
-import org.umu.cops.common.COPSDebug;\r
-import org.umu.cops.stack.COPSClientCloseMsg;\r
-import org.umu.cops.stack.COPSDecisionMsg;\r
-import org.umu.cops.stack.COPSError;\r
-import org.umu.cops.stack.COPSException;\r
-import org.umu.cops.stack.COPSHandle;\r
-import org.umu.cops.stack.COPSHeader;\r
-import org.umu.cops.stack.COPSKAMsg;\r
-import org.umu.cops.stack.COPSMsg;\r
-import org.umu.cops.stack.COPSSyncStateMsg;\r
-import org.umu.cops.stack.COPSTransceiver;\r
+import java.util.*;\r
+import java.util.concurrent.ConcurrentHashMap;\r
\r
/**\r
* COPSPepConnection represents a PEP-PDP Connection Manager.\r
* Responsible for processing messages received from PDP.\r
*/\r
public class COPSPepOSConnection implements Runnable {\r
+\r
+ public final static Logger logger = LoggerFactory.getLogger(COPSPepOSConnection.class);\r
+\r
/** Socket connected to PDP */\r
protected Socket _sock;\r
\r
/** Time to wait responses (milliseconds), default is 10 seconds */\r
- protected int _responseTime;\r
+ protected final int _responseTime;\r
\r
/** COPS Client-type */\r
- protected short _clientType;\r
+ protected final short _clientType;\r
\r
/**\r
Accounting timer value (secs)\r
*/\r
- protected short _acctTimer;\r
+ protected transient short _acctTimer;\r
\r
/**\r
Keep-alive timer value (secs)\r
*/\r
- protected short _kaTimer;\r
+ protected transient short _kaTimer;\r
\r
/**\r
* Time of the latest keep-alive received\r
/**\r
Maps a COPS Client Handle to a Request State Manager\r
*/\r
- protected Hashtable _managerMap;\r
+ protected final Map<String, COPSPepOSReqStateMan> _managerMap;\r
// map < String(COPSHandle), COPSPepOSReqStateMan>;\r
\r
/**\r
_responseTime = 10000;\r
_lastmessage = COPSHeader.COPS_OP_CAT;\r
\r
- _managerMap = new Hashtable(20);\r
+ _managerMap = new ConcurrentHashMap<>();\r
}\r
\r
/**\r
return _acctTimer;\r
}\r
\r
- /**\r
- * Gets active COPS handles\r
- * @return An <tt>Enumeration</tt> holding all active handles\r
- */\r
- protected Enumeration getHandles() {\r
- return _managerMap.keys();\r
- }\r
-\r
/**\r
* Gets all request state managers\r
* @return A <tt>Hashatable</tt> holding all request state managers\r
+ * TODO - change the return to Map\r
*/\r
protected Hashtable getReqStateMans() {\r
- return _managerMap;\r
+ return new Hashtable(_managerMap);\r
}\r
\r
/**\r
return _lastmessage;\r
}\r
\r
- /**\r
- * Sets response time\r
- * @param respTime Response time value (msecs)\r
- */\r
- public void setResponseTime(int respTime) {\r
- _responseTime = respTime;\r
- };\r
-\r
/**\r
* Sets keep-alive timer\r
* @param kaTimer Keep-alive timer value (secs)\r
int _startTime = (int) (_lastRecKa.getTime());\r
int cTime = (int) (new Date().getTime());\r
\r
- if ((int)(cTime - _startTime) > _kaTimer*1000) {\r
+ if ((cTime - _startTime) > _kaTimer*1000) {\r
_sock.close();\r
// Notify all Request State Managers\r
notifyNoKAAllReqStateMan();\r
_startTime = (int) (_lastSendKa.getTime());\r
cTime = (int) (new Date().getTime());\r
\r
- if ((int)(cTime - _startTime) > ((_kaTimer*3/4) * 1000)) {\r
+ if ((cTime - _startTime) > ((_kaTimer*3/4) * 1000)) {\r
COPSHeader hdr = new COPSHeader(COPSHeader.COPS_OP_KA);\r
COPSKAMsg msg = new COPSKAMsg();\r
\r
int _startTime = (int) (_lastSendAcc.getTime());\r
int cTime = (int) (new Date().getTime());\r
\r
- if ((int)(cTime - _startTime) > ((_acctTimer*3/4)*1000)) {\r
+ if ((cTime - _startTime) > ((_acctTimer*3/4)*1000)) {\r
// Notify all Request State Managers\r
notifyAcctAllReqStateMan();\r
_lastSendAcc = new Date();\r
\r
try {\r
Thread.sleep(500);\r
- } catch (Exception e) {};\r
+ } catch (Exception e) {\r
+ logger.error("Exception thrown while sleeping", e);\r
+ }\r
}\r
} catch (Exception e) {\r
- e.printStackTrace();\r
- COPSDebug.err(getClass().getName(), COPSDebug.ERROR_SOCKET, e);\r
+ logger.error("Error while processing socket messages", e);\r
}\r
\r
// connection closed by server\r
// COPSDebug.out(getClass().getName(),"Connection closed by server");\r
try {\r
_sock.close();\r
- } catch (IOException e) {};\r
+ } catch (IOException e) {\r
+ logger.error("Unexpected exception closing the socket", e);\r
+ }\r
\r
// Notify all Request State Managers\r
try {\r
notifyCloseAllReqStateMan();\r
- } catch (COPSPepException e) {};\r
+ } catch (COPSPepException e) {\r
+ logger.error("Error closing state managers", e);\r
+ }\r
}\r
\r
/**\r
try {\r
// Support\r
if (cMsg.getIntegrity() != null)\r
- COPSDebug.err(getClass().getName(), COPSDebug.ERROR_NOSUPPORTED, "Unsupported objects (Integrity) to connection " + conn.getInetAddress());\r
+ logger.warn("Unsupported objects (Integrity) to connection " + conn.getInetAddress());\r
\r
conn.close();\r
- } catch (Exception unae) { };\r
+ } catch (Exception unae) {\r
+ logger.error("Unexpected exception closing connection", unae);\r
+ }\r
}\r
\r
/**\r
\r
// COPSDebug.out(getClass().getName(),"Get KAlive Msg");\r
\r
- try {\r
- // Support\r
- if (cMsg.getIntegrity() != null)\r
- COPSDebug.err(getClass().getName(), COPSDebug.ERROR_NOSUPPORTED, "Unsupported objects (Integrity) to connection " + conn.getInetAddress());\r
-\r
- // must we do anything else?\r
+ // Support\r
+ if (cMsg.getIntegrity() != null)\r
+ logger.warn("Unsupported objects (Integrity) to connection " + conn.getInetAddress());\r
\r
- } catch (Exception unae) { };\r
+ // must we do anything else?\r
}\r
\r
/**\r
\r
// Support\r
if (cMsg.getIntegrity() != null)\r
- COPSDebug.err(getClass().getName(), COPSDebug.ERROR_NOSUPPORTED,\r
- "Unsupported objects (Integrity) to connection " + conn.getInetAddress());\r
+ logger.warn("Unsupported objects (Integrity) to connection " + conn.getInetAddress());\r
\r
- COPSPepOSReqStateMan manager = (COPSPepOSReqStateMan) _managerMap.get(cMsg.getClientHandle().getId().str());\r
+ COPSPepOSReqStateMan manager = _managerMap.get(cMsg.getClientHandle().getId().str());\r
\r
if (manager == null)\r
- COPSDebug.err(getClass().getName(), COPSDebug.ERROR_NOEXPECTEDMSG);\r
+ logger.warn("Unable to find state manager with ID - " + cMsg.getClientHandle().getId().str());\r
else\r
manager.processSyncStateRequest(cMsg);\r
}\r
}\r
\r
private void notifyCloseAllReqStateMan() throws COPSPepException {\r
- if (_managerMap.size() > 0) {\r
- for (Enumeration e = _managerMap.keys() ; e.hasMoreElements() ;) {\r
- String handle = (String) e.nextElement();\r
- COPSPepOSReqStateMan man = (COPSPepOSReqStateMan) _managerMap.get(handle);\r
-\r
+ for (final COPSPepOSReqStateMan man : _managerMap.values()) {\r
man.processClosedConnection(_error);\r
- }\r
}\r
}\r
\r
private void notifyNoKAAllReqStateMan() throws COPSPepException {\r
- if (_managerMap.size() > 0) {\r
- for (Enumeration e = _managerMap.keys() ; e.hasMoreElements() ;) {\r
- String handle = (String) e.nextElement();\r
- COPSPepOSReqStateMan man = (COPSPepOSReqStateMan) _managerMap.get(handle);\r
-\r
- man.processNoKAConnection();\r
- }\r
+ for (final COPSPepOSReqStateMan man : _managerMap.values()) {\r
+ man.processNoKAConnection();\r
}\r
}\r
\r
private void notifyAcctAllReqStateMan() throws COPSPepException {\r
- if (_managerMap.size() > 0) {\r
- for (Enumeration e = _managerMap.keys() ; e.hasMoreElements() ;) {\r
- String handle = (String) e.nextElement();\r
- COPSPepOSReqStateMan man = (COPSPepOSReqStateMan) _managerMap.get(handle);\r
-\r
- man.processAcctReport();\r
- }\r
+ for (final COPSPepOSReqStateMan man : _managerMap.values()) {\r
+ man.processAcctReport();\r
}\r
}\r
\r