SIPRequestLine.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package bssoft.stack.sip;
  2. import android.util.Log;
  3. import java.util.StringTokenizer;
  4. public class SIPRequestLine {
  5. public String header = null;
  6. public int iMethodType = SIPStack.SIP_METHODTYPE_NONE;
  7. public String uri = null;
  8. public int version = 2;
  9. public int revision = 0;
  10. public int code = 0;
  11. public int iMessageType = SIPStack.SIP_MSGTYPE_NONE;
  12. public boolean flag = false;
  13. public SIPRequestLine(String message) {
  14. if (message != null) {
  15. StringTokenizer st = new StringTokenizer(message, "\n", true);
  16. int headerCount = 0;
  17. while (st.hasMoreTokens()) {
  18. this.header = st.nextToken();
  19. if (this.header.length() > 1) {
  20. if (headerCount == 0 && this.header.startsWith("INVITE") && this.header.endsWith("SIP/2.0\r")) {
  21. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  22. this.iMethodType = SIPStack.SIP_METHODTYPE_INVITE;
  23. this.flag = true;
  24. break;
  25. }
  26. if (headerCount == 0 && this.header.startsWith("BYE") && this.header.endsWith("SIP/2.0\r")) {
  27. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  28. this.iMethodType = SIPStack.SIP_METHODTYPE_BYE;
  29. this.flag = true;
  30. break;
  31. }
  32. if (headerCount == 0 && this.header.startsWith("ACK") && this.header.endsWith("SIP/2.0\r")) {
  33. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  34. this.iMethodType = SIPStack.SIP_METHODTYPE_ACK;
  35. this.flag = true;
  36. break;
  37. }
  38. if (headerCount == 0 && this.header.startsWith("CANCEL") && this.header.endsWith("SIP/2.0\r")) {
  39. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  40. this.iMethodType = SIPStack.SIP_METHODTYPE_CANCEL;
  41. this.flag = true;
  42. break;
  43. }
  44. if (headerCount == 0 && this.header.startsWith("OPTIONS") && this.header.endsWith("SIP/2.0\r")) {
  45. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  46. this.iMethodType = SIPStack.SIP_METHODTYPE_OPTIONS;
  47. this.flag = true;
  48. break;
  49. }
  50. if (headerCount == 0 && this.header.startsWith("INFO") && this.header.endsWith("SIP/2.0\r")) {
  51. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  52. this.iMethodType = SIPStack.SIP_METHODTYPE_INFO;
  53. this.flag = true;
  54. break;
  55. }
  56. if (headerCount == 0 && this.header.startsWith("PRACK") && this.header.endsWith("SIP/2.0\r")) {
  57. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  58. this.iMethodType = SIPStack.SIP_METHODTYPE_PRACK;
  59. this.flag = true;
  60. break;
  61. }
  62. if (headerCount == 0 && this.header.startsWith("MESSAGE") && this.header.endsWith("SIP/2.0\r")) {
  63. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  64. this.iMethodType = SIPStack.SIP_METHODTYPE_MESSAGE;
  65. this.flag = true;
  66. break;
  67. }
  68. if (headerCount == 0 && this.header.startsWith("SUBSCRIBE") && this.header.endsWith("SIP/2.0\r")) {
  69. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  70. this.iMethodType = SIPStack.SIP_METHODTYPE_SUBSCRIBE;
  71. break;
  72. }
  73. if (headerCount == 0 && this.header.startsWith("REFER") && this.header.endsWith("SIP/2.0\r")) {
  74. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  75. this.iMethodType = SIPStack.SIP_METHODTYPE_REFER;
  76. break;
  77. }
  78. if (headerCount == 0 && this.header.startsWith("NOTIFY") && this.header.endsWith("SIP/2.0\r")) {
  79. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  80. this.iMethodType = SIPStack.SIP_METHODTYPE_NOTIFY;
  81. break;
  82. }
  83. if (headerCount == 0 && this.header.startsWith("PUBLISH") && this.header.endsWith("SIP/2.0\r")) {
  84. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  85. this.iMethodType = SIPStack.SIP_METHODTYPE_PUBLISH;
  86. break;
  87. }
  88. if (headerCount == 0 && this.header.startsWith("REGISTER") && this.header.endsWith("SIP/2.0\r")) {
  89. this.iMessageType = SIPStack.SIP_MSGTYPE_REQUEST;
  90. this.iMethodType = SIPStack.SIP_METHODTYPE_REGISTER;
  91. this.flag = true;
  92. break;
  93. }
  94. if (headerCount == 0 && this.header.startsWith("SIP/2.0") && this.header.endsWith("\r")) {
  95. this.iMessageType = SIPStack.SIP_MSGTYPE_RESPONSE;
  96. this.iMethodType = SIPStack.SIP_METHODTYPE_NONE;
  97. StringTokenizer tokenArray = new StringTokenizer(this.header, " ", true);
  98. int tokenCount = 0;
  99. //Log.e("INVITEParser", "[INVITEParser] ============ token ============ " + this.header);
  100. String[] strSplit = this.header.split(" ");
  101. this.code = Integer.parseInt(strSplit[1]);
  102. while (tokenArray.hasMoreTokens()) {
  103. String token = tokenArray.nextToken();
  104. //Log.e("INVITEParser", "[INVITEParser] ============ token ============ " + token);
  105. tokenCount++;
  106. if (token.compareTo(" ") != 0 && tokenCount == 2)
  107. //if (tokenCount == 2)
  108. this.code = Integer.parseInt(token);
  109. }
  110. //Log.e("INVITEParser", "[INVITEParser] ============ token this.code ============ " + this.code);
  111. int iS = message.indexOf("CSeq: ");
  112. int iE = 0;
  113. if (iS >= 0) {
  114. iE = message.indexOf(SIPStack.SIP_LINE_END, iS);
  115. if (iE <= 0)
  116. break;
  117. String strCSEQ = message.substring(iS, iE);
  118. tokenArray = new StringTokenizer(strCSEQ, " ", true);
  119. tokenCount = 0;
  120. while (tokenArray.hasMoreTokens()) {
  121. String token = tokenArray.nextToken();
  122. if (token.length() > 0 && token.compareTo(" ") != 0) {
  123. tokenCount++;
  124. if (tokenCount == 3) {
  125. if (token.compareTo("REGISTER") == 0) {
  126. this.iMethodType = SIPStack.SIP_METHODTYPE_REGISTER;
  127. } else if (token.compareTo("INVITE") == 0) {
  128. this.iMethodType = SIPStack.SIP_METHODTYPE_INVITE;
  129. } else if (token.compareTo("CANCEL") == 0) {
  130. this.iMethodType = SIPStack.SIP_METHODTYPE_CANCEL;
  131. } else if (token.compareTo("BYE") == 0) {
  132. this.iMethodType = SIPStack.SIP_METHODTYPE_BYE;
  133. } else if (token.compareTo("INFO") == 0) {
  134. this.iMethodType = SIPStack.SIP_METHODTYPE_INFO;
  135. } else if (token.compareTo("OPTIONS") == 0) {
  136. this.iMethodType = SIPStack.SIP_METHODTYPE_OPTIONS;
  137. } else if (token.compareTo("ACK") == 0) {
  138. this.iMethodType = SIPStack.SIP_METHODTYPE_ACK;
  139. } else if (token.compareTo("REFER") == 0) {
  140. this.iMethodType = SIPStack.SIP_METHODTYPE_REFER;
  141. } else if (token.compareTo("NOTIFY") == 0) {
  142. this.iMethodType = SIPStack.SIP_METHODTYPE_NOTIFY;
  143. } else if (token.compareTo("PUBLISH") == 0) {
  144. this.iMethodType = SIPStack.SIP_METHODTYPE_PUBLISH;
  145. } else if (token.compareTo("MESSAGE") == 0) {
  146. this.iMethodType = SIPStack.SIP_METHODTYPE_MESSAGE;
  147. } else if (token.compareTo("SUBSCRIBE") == 0) {
  148. this.iMethodType = SIPStack.SIP_METHODTYPE_SUBSCRIBE;
  149. } else if (token.compareTo("PRACK") == 0) {
  150. this.iMethodType = SIPStack.SIP_METHODTYPE_PRACK;
  151. }
  152. if (this.iMethodType != SIPStack.SIP_METHODTYPE_NONE)
  153. this.flag = true;
  154. break;
  155. }
  156. }
  157. }
  158. }
  159. break;
  160. }
  161. }
  162. }
  163. if (this.flag && this.iMessageType == SIPStack.SIP_MSGTYPE_REQUEST && this.header != null) {
  164. StringTokenizer tokenArray = new StringTokenizer(this.header, " ", true);
  165. int tokenCount = 0;
  166. while (tokenArray.hasMoreTokens()) {
  167. String token = tokenArray.nextToken();
  168. if (token.compareTo(" ") == 0)
  169. continue;
  170. tokenCount++;
  171. if (tokenCount == 2)
  172. this.uri = token;
  173. }
  174. }
  175. }
  176. //print();
  177. }
  178. public void print() {
  179. System.out.println("=====================================================");
  180. System.out.println("HEADER:");
  181. System.out.println(this.header);
  182. System.out.println(".....................................................");
  183. System.out.println("flag\t\t:" + this.flag);
  184. System.out.println("iMethodType\t:" + this.iMethodType);
  185. System.out.println("uri\t\t\t:" + this.uri);
  186. System.out.println("code\t\t:" + this.code);
  187. System.out.println("version\t\t:" + this.version);
  188. System.out.println("revision\t:" + this.revision);
  189. System.out.println("iMessageType:" + this.iMessageType);
  190. System.out.println("=====================================================");
  191. }
  192. }