4 package org.pcmm.gates.impl;
6 import org.pcmm.base.IPCMMBaseObject;
7 import org.pcmm.gates.*;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
11 import java.util.Arrays;
15 * <Gate-set>=<Decision Header><TransactionID><AMID> <SubscriberID> [<GateI>]
16 * <GateSpec> <Traffic Profile> <classifier>
19 public class PCMMGateReq implements IPCMMGate {
21 public final static Logger logger = LoggerFactory.getLogger(PCMMGateReq.class);
23 private boolean multicast;
24 private IGateID gateID;
26 private IPCMMError error;
27 private ISubscriberID subscriberID;
28 private ITransactionID transactionID;
29 private IGateSpec gateSpec;
30 private ITrafficProfile trafficProfile;
31 private IClassifier classifier;
33 public PCMMGateReq() {
36 public PCMMGateReq(byte[] data) {
40 sNum = sType = (byte) 0;
41 while (offset + 5 < data.length) {
43 len |= ((short) data[offset]) << 8;
44 len |= ((short) data[offset + 1]) & 0xFF;
45 sNum = data[offset + 2];
46 sType = data[offset + 3];
47 byte[] dataBuffer = Arrays.copyOfRange(data, offset, offset + len);
50 setGateID(new GateID(dataBuffer));
53 setAMID(new AMID(dataBuffer));
55 case ISubscriberID.SNUM:
56 setSubscriberID(new SubscriberID(dataBuffer));
58 case ITransactionID.SNUM:
59 setTransactionID(new TransactionID(dataBuffer));
62 setGateSpec(new GateSpec(dataBuffer));
64 case ITrafficProfile.SNUM:
65 // TODO - Will need to support other traffic profiles
66 setTrafficProfile(new DOCSISServiceClassNameTrafficProfile(dataBuffer));
68 case IClassifier.SNUM:
69 setClassifier(new Classifier(dataBuffer));
72 error = new PCMMError(dataBuffer);
75 logger.warn("Unhandled Object skept : S-NUM=" + sNum
76 + " S-TYPE=" + sType + " LEN=" + len);
85 * @see org.pcmm.gates.IPCMMGate#isMulticast()
88 public boolean isMulticast() {
89 // TODO Auto-generated method stub
96 * @see org.pcmm.gates.IPCMMGate#setGateID(short)
99 public void setGateID(IGateID gateid) {
100 this.gateID = gateid;
107 * @see org.pcmm.gates.IPCMMGate#setAMID(org.pcmm.gates.IAMID)
110 public void setAMID(IAMID iamid) {
118 * org.pcmm.gates.IPCMMGate#getSubscriberID(org.pcmm.gates.ISubscriberID)
121 public void setSubscriberID(ISubscriberID subscriberID) {
122 this.subscriberID = subscriberID;
128 * @see org.pcmm.gates.IPCMMGate#getGateSpec(org.pcmm.gates.IGateSpec)
131 public void setGateSpec(IGateSpec gateSpec) {
132 this.gateSpec = gateSpec;
138 * @see org.pcmm.gates.IPCMMGate#getClassifier(org.pcmm.gates.IClassifier)
141 public void setClassifier(IClassifier classifier) {
142 this.classifier = classifier;
149 * org.pcmm.gates.IPCMMGate#getTrafficProfile(org.pcmm.gates.ITrafficProfile
153 public void setTrafficProfile(ITrafficProfile profile) {
154 this.trafficProfile = profile;
160 * @see org.pcmm.gates.IPCMMGate#getGateID()
163 public IGateID getGateID() {
170 * @see org.pcmm.gates.IPCMMGate#getAMID()
173 public IAMID getAMID() {
180 * @see org.pcmm.gates.IPCMMGate#getSubscriberID()
183 public ISubscriberID getSubscriberID() {
190 * @see org.pcmm.gates.IPCMMGate#getGateSpec()
193 public IGateSpec getGateSpec() {
200 * @see org.pcmm.gates.IPCMMGate#getClassifier()
203 public IClassifier getClassifier() {
210 * @see org.pcmm.gates.IPCMMGate#getTrafficProfile()
213 public ITrafficProfile getTrafficProfile() {
214 return trafficProfile;
218 public void setTransactionID(ITransactionID transactionID) {
219 this.transactionID = transactionID;
223 public ITransactionID getTransactionID() {
224 return transactionID;
227 public IPCMMError getError() {
231 public void setError(IPCMMError error) {
236 public byte[] getData() {
237 byte[] array = new byte[0];
238 if (getTransactionID() != null) {
239 array = fill(array, getTransactionID());
241 if (getGateID() != null) {
242 array = fill(array, getGateID());
244 if (getAMID() != null) {
245 array = fill(array, getAMID());
248 if (getSubscriberID() != null) {
249 array = fill(array, getSubscriberID());
251 if (getGateSpec() != null) {
252 array = fill(array, getGateSpec());
254 if (getTrafficProfile() != null) {
255 array = fill(array, getTrafficProfile());
257 if (getClassifier() != null) {
258 array = fill(array, getClassifier());
263 private byte[] fill(byte[] array, IPCMMBaseObject obj) {
264 byte[] a = obj.getAsBinaryArray();
265 int offset = array.length;
266 array = Arrays.copyOf(array, offset + a.length);
267 System.arraycopy(a, 0, array, offset, a.length);