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 setTrafficProfile(new BestEffortService(dataBuffer));
67 case IClassifier.SNUM:
68 setClassifier(new Classifier(dataBuffer));
71 error = new PCMMError(dataBuffer);
74 logger.warn("Unhandled Object skept : S-NUM=" + sNum
75 + " S-TYPE=" + sType + " LEN=" + len);
84 * @see org.pcmm.gates.IPCMMGate#isMulticast()
87 public boolean isMulticast() {
88 // TODO Auto-generated method stub
95 * @see org.pcmm.gates.IPCMMGate#setGateID(short)
98 public void setGateID(IGateID gateid) {
106 * @see org.pcmm.gates.IPCMMGate#setAMID(org.pcmm.gates.IAMID)
109 public void setAMID(IAMID iamid) {
117 * org.pcmm.gates.IPCMMGate#getSubscriberID(org.pcmm.gates.ISubscriberID)
120 public void setSubscriberID(ISubscriberID subscriberID) {
121 this.subscriberID = subscriberID;
127 * @see org.pcmm.gates.IPCMMGate#getGateSpec(org.pcmm.gates.IGateSpec)
130 public void setGateSpec(IGateSpec gateSpec) {
131 this.gateSpec = gateSpec;
137 * @see org.pcmm.gates.IPCMMGate#getClassifier(org.pcmm.gates.IClassifier)
140 public void setClassifier(IClassifier classifier) {
141 this.classifier = classifier;
148 * org.pcmm.gates.IPCMMGate#getTrafficProfile(org.pcmm.gates.ITrafficProfile
152 public void setTrafficProfile(ITrafficProfile profile) {
153 this.trafficProfile = profile;
159 * @see org.pcmm.gates.IPCMMGate#getGateID()
162 public IGateID getGateID() {
169 * @see org.pcmm.gates.IPCMMGate#getAMID()
172 public IAMID getAMID() {
179 * @see org.pcmm.gates.IPCMMGate#getSubscriberID()
182 public ISubscriberID getSubscriberID() {
189 * @see org.pcmm.gates.IPCMMGate#getGateSpec()
192 public IGateSpec getGateSpec() {
199 * @see org.pcmm.gates.IPCMMGate#getClassifier()
202 public IClassifier getClassifier() {
209 * @see org.pcmm.gates.IPCMMGate#getTrafficProfile()
212 public ITrafficProfile getTrafficProfile() {
213 return trafficProfile;
217 public void setTransactionID(ITransactionID transactionID) {
218 this.transactionID = transactionID;
222 public ITransactionID getTransactionID() {
223 return transactionID;
226 public IPCMMError getError() {
230 public void setError(IPCMMError error) {
235 public byte[] getData() {
236 byte[] array = new byte[0];
237 if (getTransactionID() != null) {
238 array = fill(array, getTransactionID());
240 if (getGateID() != null) {
241 array = fill(array, getGateID());
243 if (getAMID() != null) {
244 array = fill(array, getAMID());
247 if (getSubscriberID() != null) {
248 array = fill(array, getSubscriberID());
250 if (getGateSpec() != null) {
251 array = fill(array, getGateSpec());
253 if (getTrafficProfile() != null) {
254 array = fill(array, getTrafficProfile());
256 if (getClassifier() != null) {
257 array = fill(array, getClassifier());
262 private byte[] fill(byte[] array, IPCMMBaseObject obj) {
263 byte[] a = obj.getAsBinaryArray();
264 int offset = array.length;
265 array = Arrays.copyOf(array, offset + a.length);
266 System.arraycopy(a, 0, array, offset, a.length);