Bladeren bron

An update to the methods parser

List if changes:
  * METHOD_REFER defined in msg_parser.h
  * Changed the prototype of parse_method to use enum request_type
  * Define ALL_METHODS macro
  * Replace METH_* with METHOD_*
Jan Janak 16 jaren geleden
bovenliggende
commit
28e95087c2
3 gewijzigde bestanden met toevoegingen van 19 en 37 verwijderingen
  1. 1 1
      parser/msg_parser.h
  2. 15 15
      parser/parse_methods.c
  3. 3 21
      parser/parse_methods.h

+ 1 - 1
parser/msg_parser.h

@@ -79,7 +79,7 @@
 enum request_method { METHOD_UNDEF=0, METHOD_INVITE=1, METHOD_CANCEL=2, METHOD_ACK=4,
 	METHOD_BYE=8, METHOD_INFO=16, METHOD_REGISTER=32, METHOD_SUBSCRIBE=64,
 	METHOD_NOTIFY=128, METHOD_MESSAGE=256, METHOD_OPTIONS=512,
-	METHOD_PRACK=1024, METHOD_UPDATE=2048, METHOD_OTHER=4096 };
+	METHOD_PRACK=1024, METHOD_UPDATE=2048, METHOD_REFER = 4096, METHOD_OTHER=8192 };
 
 #define FL_FORCE_RPORT  (1 << 0)  /* force rport */
 #define FL_FORCE_ACTIVE (1 << 1)  /* force active SDP */

+ 15 - 15
parser/parse_methods.c

@@ -49,7 +49,7 @@ static int token_char(char _c)
   * Parse a method pointed by _next, assign its enum bit to _method, and update
   * _next past the method. Returns 1 if parse succeeded and 0 otherwise.
   */
-int parse_method(str* _next, unsigned int* _method) 
+int parse_method(str* _next, enum request_method* _method) 
  {
 	 if (!_next || !_method) {
 		 LOG(L_ERR, "parse_method: Invalid parameter value\n");
@@ -65,7 +65,7 @@ int parse_method(str* _next, unsigned int* _method)
 	 case 'A':
 	 case 'a':
 		 if ((_next->len > 2) && !strncasecmp(_next->s + 1, "ck", 2)) {
- 			*_method = METH_ACK;
+ 			*_method = METHOD_ACK;
  			_next->len -= 3;
  			_next->s += 3;
  			return 1;
@@ -76,7 +76,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'B':
  	case 'b':
  		if ((_next->len > 2) && !strncasecmp(_next->s + 1, "ye", 2)) {
- 			*_method = METH_BYE;
+ 			*_method = METHOD_BYE;
  			_next->len -= 3;
  			_next->s += 3;
  			return 1;
@@ -87,7 +87,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'C':
  	case 'c':
  		if ((_next->len > 5) && !strncasecmp(_next->s + 1, "ancel", 5)) {
- 			*_method = METH_CANCEL;
+ 			*_method = METHOD_CANCEL;
  			_next->len -= 6;
  			_next->s += 6;
  			return 1;
@@ -100,14 +100,14 @@ int parse_method(str* _next, unsigned int* _method)
  		if ((_next->len > 3) &&
  		    ((*(_next->s + 1) == 'N') || (*(_next->s + 1) == 'n'))) {
  			if (!strncasecmp(_next->s + 2, "fo", 2)) {
- 				*_method = METH_INFO;
+ 				*_method = METHOD_INFO;
  				_next->len -= 4;
  				_next->s += 4;
  				return 1;
  			}
 
  			if ((_next->len > 5) && !strncasecmp(_next->s + 2, "vite", 4)) {
- 				*_method = METH_INVITE;
+ 				*_method = METHOD_INVITE;
  				_next->len -= 6;
  				_next->s += 6;
  				return 1;
@@ -118,7 +118,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'M':
  	case 'm':
  		if ((_next->len > 6) && !strncasecmp(_next->s + 1, "essage", 6)) {
- 			*_method = METH_MESSAGE;
+ 			*_method = METHOD_MESSAGE;
  			_next->len -= 7;
  			_next->s += 7;
  			return 1;
@@ -129,7 +129,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'N':
  	case 'n':
  		if ((_next->len > 5) && !strncasecmp(_next->s + 1, "otify", 5)) {
- 			*_method = METH_NOTIFY;
+ 			*_method = METHOD_NOTIFY;
  			_next->len -= 6;
  			_next->s += 6;
  			return 1;
@@ -140,7 +140,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'O':
  	case 'o':
  		if ((_next->len > 6) && !strncasecmp(_next->s + 1, "ptions", 6)) {
- 			*_method = METH_OPTIONS;
+ 			*_method = METHOD_OPTIONS;
  			_next->len -= 7;
  			_next->s += 7;
  			return 1;
@@ -151,7 +151,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'P':
  	case 'p':
  		if ((_next->len > 4) && !strncasecmp(_next->s + 1, "rack", 4)) {
- 			*_method = METH_PRACK;
+ 			*_method = METHOD_PRACK;
  			_next->len -= 5;
  			_next->s += 5;
  			return 1;
@@ -164,14 +164,14 @@ int parse_method(str* _next, unsigned int* _method)
  		if ((_next->len > 4) &&
  		    ((*(_next->s + 1) == 'E') || (*(_next->s + 1) == 'e'))) {
  			if (!strncasecmp(_next->s + 2, "fer", 3)) {
- 				*_method = METH_REFER;
+ 				*_method = METHOD_REFER;
  				_next->len -= 5;
  				_next->s += 5;
  				return 1;
  			}
 
  			if ((_next->len > 7) && !strncasecmp(_next->s + 2, "gister", 6)) {
- 				*_method = METH_REGISTER;
+ 				*_method = METHOD_REGISTER;
  				_next->len -= 8;
  				_next->s += 8;
  				return 1;
@@ -182,7 +182,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'S':
  	case 's':
  		if ((_next->len > 8) && !strncasecmp(_next->s + 1, "ubscribe", 8)) {
- 			*_method = METH_SUBSCRIBE;
+ 			*_method = METHOD_SUBSCRIBE;
  			_next->len -= 9;
  			_next->s += 9;
  			return 1;
@@ -193,7 +193,7 @@ int parse_method(str* _next, unsigned int* _method)
  	case 'U':
  	case 'u':
  		if ((_next->len > 5) && !strncasecmp(_next->s + 1, "pdate", 5)) {
- 			*_method = METH_UPDATE;
+ 			*_method = METHOD_UPDATE;
  			_next->len -= 6;
  			_next->s += 6;
  			return 1;
@@ -211,7 +211,7 @@ int parse_method(str* _next, unsigned int* _method)
  			_next->s++;
  			_next->len--;
  		} while (_next->len && token_char(*(_next->s)));
- 		*_method = METH_UNKNOWN;
+ 		*_method = METHOD_OTHER;
  		return 1;
  	} else {
  		return 0;

+ 3 - 21
parser/parse_methods.h

@@ -29,27 +29,9 @@
 #define PARSE_METHODS_H
 
 #include "../str.h"
+#include "msg_parser.h"
 
-/*
- * Methods found in methods Contact parameter or Allow header.
- */
-enum method {
-	METH_UNKNOWN = 1, 
-	METH_ACK = 2, 
-	METH_BYE = 4, 
-	METH_CANCEL = 8,
-	METH_INFO = 16, 
-	METH_INVITE = 32, 
-	METH_NOTIFY = 64,
-	METH_OPTIONS = 128, 
-	METH_PRACK = 256, 
-	METH_REGISTER  = 512,
-	METH_SUBSCRIBE = 1024, 
-	METH_UPDATE = 2048, 
-	METH_MESSAGE = 4096,
-	METH_REFER = 8192
-};
-
+#define ALL_METHODS 0xffffffff
 
 /* 
  * Parse comma separated list of methods pointed by _body and assign their
@@ -57,7 +39,7 @@ enum method {
  */
 int parse_methods(str* _body, unsigned int* _methods);
 
-int parse_method(str* _next, unsigned int* _method);
+int parse_method(str* _next, enum request_method* _method);
 
 
 #endif /* PARSE_METHODS_H */