4 package org.pcmm.messages.impl;
6 import org.umu.cops.stack.*;
7 import org.umu.cops.stack.COPSHeader.ClientType;
8 import org.umu.cops.stack.COPSHeader.OPCode;
10 import java.io.IOException;
11 import java.io.OutputStream;
12 import java.net.Socket;
13 import java.util.List;
15 import java.util.concurrent.ConcurrentHashMap;
18 * COPS Decision Message
23 public class COPSDecisionMsgEX extends COPSMsg {
25 /* COPSHeader coming from base class */
26 private final COPSHandle _clientHandle;
27 private final COPSError _error;
28 private final COPSIntegrity _integrity;
29 // private COPSContext _decContext;
30 private final COPSClientSI clientSI;
31 private final Map<COPSContext, List<COPSDecision>> _decisions;
33 public COPSDecisionMsgEX(final ClientType clientType, final COPSHandle _clientHandle, final COPSError _error,
34 final COPSIntegrity _integrity, final COPSClientSI clientSI,
35 final Map<COPSContext, List<COPSDecision>> _decisions) {
36 super(new COPSHeader(OPCode.DEC, clientType));
37 this._clientHandle = _clientHandle;
39 this._integrity = _integrity;
40 this.clientSI = clientSI;
41 this._decisions = new ConcurrentHashMap<>(_decisions);
45 protected int getDataLength() {
47 if (_clientHandle != null) out += _clientHandle.getDataLength();
48 if (_error != null) out += _error.getDataLength();
51 // Display any local decisions
52 for (final Map.Entry<COPSContext, List<COPSDecision>> entry : _decisions.entrySet()) {
53 out += entry.getKey().getDataLength();
54 for (final COPSDecision decision : entry.getValue()) {
55 out += decision.getDataLength();
58 if (clientSI != null) out += clientSI.getDataLength();
59 if (_integrity != null) out += _integrity.getDataLength();
64 protected void writeBody(final Socket socket) throws IOException {
65 if (_clientHandle != null)
66 _clientHandle.writeData(socket);
68 _error.writeData(socket);
71 // Display any local decisions
72 for (final Map.Entry<COPSContext, List<COPSDecision>> entry : _decisions.entrySet()) {
74 final COPSContext context = entry.getKey();
75 final List<COPSDecision> decisions = entry.getValue();
76 context.writeData(socket);
78 for (final COPSDecision decision : decisions) {
79 decision.writeData(socket);
83 clientSI.writeData(socket);
84 if (_integrity != null)
85 _integrity.writeData(socket);
89 * Method getClientHandle
91 * @return a COPSHandle
94 public COPSHandle getClientHandle() {
98 public COPSClientSI getClientSI() {
103 protected void dumpBody(final OutputStream os) throws IOException {
104 if (_clientHandle != null)
105 _clientHandle.dump(os);
109 // Display any local decisions
110 for (final Map.Entry<COPSContext, List<COPSDecision>> entry : _decisions.entrySet()) {
111 final COPSContext context = entry.getKey();
112 final List<COPSDecision> v = entry.getValue();
115 for (final COPSDecision decision : v) {
119 if (clientSI != null)
121 if (_integrity != null) {