package uk.co.mmscomputing.device.capi.q931;
import java.util.Vector;
import java.util.Enumeration;
import uk.co.mmscomputing.device.capi.*;
public class Q931Message implements Q931Constants{
// ITU Recommendation Q.931 (03/93) p53 4.2.
private int callref;
private int type;
private Vector list = new Vector();
public Q931Message(int callref,int type){
this.callref=callref;
this.type=type;
}
protected void add(Q931 ie){
list.add(ie);
}
public String toString(){
String s="Q931 Message\n";
s+=" msg type = "+MessageTypeStrs[type]+"\n";
s+=" call ref = "+callref+"\n";
for(Enumeration e = list.elements() ; e.hasMoreElements() ;){
s+=e.nextElement().toString()+"\n";
}
return s;
}
/*
static public Q931Message create(byte[] data,int off){
if(data[off++]!=0x08){throw new IllegalArgumentException();} // Q.931 protocol discriminator is 0x08
int len = data[off++]; // octet 2 length call reference
int callref = 0;
for(int i=0;i<len;i++){ // octet 2+
callref = (callref << 8) | (data[off++] & 0x00FF);
}
int type = data[off++]&0x00FF; // message type
Q931Message msg = new Q931Message(callref,type);
while(off<data.length){
Q931 qmsg = Q931Factory.create(data,off);
msg.add(qmsg);
off+=2+qmsg.getLength();
}
return msg;
}
*/
static public Q931Message create(Rider r){
if(r.read()!=0x08){throw new IllegalArgumentException();} // Q.931 protocol discriminator is 0x08
int len = r.read(); // octet 2 length call reference
int callref = 0;
for(int i=0;i<len;i++){ // octet 2+
callref <<= 8;
callref |= r.read();
}
int type = r.read(); // message type
Q931Message msg = new Q931Message(callref,type);
try{
while(true){msg.add(Q931Factory.create(r));}
}catch(IndexOutOfBoundsException ioobe){}
return msg;
}
}