123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- package bssoft.stack.sip;
- import android.util.Log;
- import java.util.StringTokenizer;
- public class SIPRequestLine {
- public String header = null;
- public int iMethodType = SIPStack.SIP_METHODTYPE_NONE;
- public String uri = null;
- public int version = 2;
- public int revision = 0;
- public int code = 0;
- public int iMessageType = SIPStack.SIP_MSGTYPE_NONE;
- public boolean flag = false;
- public SIPRequestLine(String message) {
- if (message != null) {
- StringTokenizer st = new StringTokenizer(message, "\n", true);
- int headerCount = 0;
- while (st.hasMoreTokens()) {
- this.header = st.nextToken();
- if (this.header.length() > 1) {
- if (headerCount == 0 && this.header.startsWith("INVITE") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_INVITE;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("BYE") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_BYE;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("ACK") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_ACK;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("CANCEL") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_CANCEL;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("OPTIONS") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_OPTIONS;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("INFO") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_INFO;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("PRACK") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_PRACK;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("MESSAGE") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_MESSAGE;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("SUBSCRIBE") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_SUBSCRIBE;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("REFER") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_REFER;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("NOTIFY") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_NOTIFY;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("PUBLISH") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_PUBLISH;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("REGISTER") && this.header.endsWith("SIP/2.0\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
- this.iMethodType = SIPStack.SIP_METHODTYPE_REGISTER;
- this.flag = true;
- break;
- }
- if (headerCount == 0 && this.header.startsWith("SIP/2.0") && this.header.endsWith("\r")) {
- this.iMessageType = SIPStack.SIP_MSGTYPE_RESPONSE;
- this.iMethodType = SIPStack.SIP_METHODTYPE_NONE;
- StringTokenizer tokenArray = new StringTokenizer(this.header, " ", true);
- int tokenCount = 0;
- //Log.e("INVITEParser", "[INVITEParser] ============ token ============ " + this.header);
- String[] strSplit = this.header.split(" ");
- this.code = Integer.parseInt(strSplit[1]);
- while (tokenArray.hasMoreTokens()) {
- String token = tokenArray.nextToken();
- //Log.e("INVITEParser", "[INVITEParser] ============ token ============ " + token);
- tokenCount++;
- if (token.compareTo(" ") != 0 && tokenCount == 2)
- //if (tokenCount == 2)
- this.code = Integer.parseInt(token);
- }
- //Log.e("INVITEParser", "[INVITEParser] ============ token this.code ============ " + this.code);
- int iS = message.indexOf("CSeq: ");
- int iE = 0;
- if (iS >= 0) {
- iE = message.indexOf(SIPStack.SIP_LINE_END, iS);
- if (iE <= 0)
- break;
- String strCSEQ = message.substring(iS, iE);
- tokenArray = new StringTokenizer(strCSEQ, " ", true);
- tokenCount = 0;
- while (tokenArray.hasMoreTokens()) {
- String token = tokenArray.nextToken();
- if (token.length() > 0 && token.compareTo(" ") != 0) {
- tokenCount++;
- if (tokenCount == 3) {
- if (token.compareTo("REGISTER") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_REGISTER;
- } else if (token.compareTo("INVITE") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_INVITE;
- } else if (token.compareTo("CANCEL") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_CANCEL;
- } else if (token.compareTo("BYE") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_BYE;
- } else if (token.compareTo("INFO") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_INFO;
- } else if (token.compareTo("OPTIONS") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_OPTIONS;
- } else if (token.compareTo("ACK") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_ACK;
- } else if (token.compareTo("REFER") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_REFER;
- } else if (token.compareTo("NOTIFY") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_NOTIFY;
- } else if (token.compareTo("PUBLISH") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_PUBLISH;
- } else if (token.compareTo("MESSAGE") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_MESSAGE;
- } else if (token.compareTo("SUBSCRIBE") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_SUBSCRIBE;
- } else if (token.compareTo("PRACK") == 0) {
- this.iMethodType = SIPStack.SIP_METHODTYPE_PRACK;
- }
- if (this.iMethodType != SIPStack.SIP_METHODTYPE_NONE)
- this.flag = true;
- break;
- }
- }
- }
- }
- break;
- }
- }
- }
- if (this.flag && this.iMessageType == SIPStack.SIP_MSGTYPE_REQUEST && this.header != null) {
- StringTokenizer tokenArray = new StringTokenizer(this.header, " ", true);
- int tokenCount = 0;
- while (tokenArray.hasMoreTokens()) {
- String token = tokenArray.nextToken();
- if (token.compareTo(" ") == 0)
- continue;
- tokenCount++;
- if (tokenCount == 2)
- this.uri = token;
- }
- }
- }
- //print();
- }
- public void print() {
- System.out.println("=====================================================");
- System.out.println("HEADER:");
- System.out.println(this.header);
- System.out.println(".....................................................");
- System.out.println("flag\t\t:" + this.flag);
- System.out.println("iMethodType\t:" + this.iMethodType);
- System.out.println("uri\t\t\t:" + this.uri);
- System.out.println("code\t\t:" + this.code);
- System.out.println("version\t\t:" + this.version);
- System.out.println("revision\t:" + this.revision);
- System.out.println("iMessageType:" + this.iMessageType);
- System.out.println("=====================================================");
- }
- }
|