a375d3e1ff5015b16e9a87525d0973ecc3734e04
[packetcable.git] / packetcable-driver / src / main / java / org / umu / cops / ospep / COPSPepOSConnection.java
1 package org.umu.cops.ospep;
2
3 import org.umu.cops.prpep.COPSPepConnection;
4 import org.umu.cops.stack.*;
5
6 import java.net.Socket;
7 import java.util.Hashtable;
8 import java.util.List;
9
10 /**
11  * COPSPepConnection represents a PEP-PDP Connection Manager.
12  * Responsible for processing messages received from PDP.
13  */
14 public class COPSPepOSConnection extends COPSPepConnection {
15
16     /**
17      * Creates a new PEP connection
18      * @param clientType    PEP's client-type
19      * @param sock          Socket connected to PDP
20      */
21     public COPSPepOSConnection(final short clientType, final Socket sock) {
22         super(clientType, sock);
23     }
24
25     /**
26      * Gets all request state managers
27      * @return  A <tt>Hashatable</tt> holding all request state managers
28      * TODO - change the return to Map
29      */
30     protected Hashtable getReqStateMans() {
31         return new Hashtable(_managerMap);
32     }
33
34     @Override
35     protected void handleDecisionMsg(final COPSDecisionMsg dMsg) throws COPSException {
36         final COPSPepOSReqStateMan manager = (COPSPepOSReqStateMan)_managerMap.get(dMsg.getClientHandle());
37         manager.processDecision(dMsg);
38     }
39
40     /**
41      * Adds a new request state
42      * @param clientHandle  Client's handle
43      * @param process       Policy data processing object
44      * @param clientSIs     Client data from the outsourcing event
45      * @return              The newly created request state manager
46      * @throws COPSException
47      */
48     protected COPSPepOSReqStateMan addRequestState(final String clientHandle, final COPSPepOSDataProcess process,
49                                                    final List<COPSClientSI> clientSIs) throws COPSException {
50         final COPSHandle handle = new COPSHandle(new COPSData(clientHandle));
51         final COPSPepOSReqStateMan manager = new COPSPepOSReqStateMan(_clientType, handle, process, clientSIs);
52         if (_managerMap.get(handle) != null)
53             throw new COPSPepException("Duplicate Handle, rejecting " + clientHandle);
54         _managerMap.put(handle, manager);
55         manager.initRequestState(_sock);
56         return manager;
57     }
58
59 }