[SR-Dev] git:master: parser: added METHOD_PUBLISH

Daniel-Constantin Mierla miconda at gmail.com
Fri Apr 17 00:36:48 CEST 2009


Module: sip-router
Branch: master
Commit: bd0029313d302677fe1663eea4fa43b133f4620f
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=bd0029313d302677fe1663eea4fa43b133f4620f

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Fri Apr 17 00:33:43 2009 +0200

parser: added METHOD_PUBLISH

- new bit flag allocated for PUBLISH
- parse_method() supports now METHOD_PUBLISH
- parse_methods() returns 0 on success and -1 on error as it is expected
  by all use cases

---

 parser/msg_parser.h    |   22 ++++++++++++++++++----
 parser/parse_methods.c |   24 ++++++++++++++----------
 2 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/parser/msg_parser.h b/parser/msg_parser.h
index dd1b327..b8edc6b 100644
--- a/parser/msg_parser.h
+++ b/parser/msg_parser.h
@@ -76,10 +76,24 @@
 #define SIP_MSG_START(m)	((m)->first_line.u.request.method.s)
 
 /* number methods as power of two to allow bitmap matching */
-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_REFER = 4096, METHOD_OTHER=8192 };
+enum request_method {
+	METHOD_UNDEF=0,           /* 0 - --- */
+	METHOD_INVITE=1,          /* 1 - 2^0 */
+	METHOD_CANCEL=2,          /* 2 - 2^1 */
+	METHOD_ACK=4,             /* 3 - 2^2 */
+	METHOD_BYE=8,             /* 4 - 2^3 */
+	METHOD_INFO=16,           /* 5 - 2^4 */
+	METHOD_REGISTER=32,       /* 6 - 2^5 */
+	METHOD_SUBSCRIBE=64,      /* 7 - 2^6 */
+	METHOD_NOTIFY=128,        /* 8 - 2^7 */
+	METHOD_MESSAGE=256,       /* 9 - 2^8 */
+	METHOD_OPTIONS=512,       /* 10 - 2^9 */
+	METHOD_PRACK=1024,        /* 11 - 2^10 */
+	METHOD_UPDATE=2048,       /* 12 - 2^11 */
+	METHOD_REFER=4096,        /* 13 - 2^12 */
+	METHOD_PUBLISH=8192,      /* 14 - 2^13 */
+	METHOD_OTHER=16384        /* 15 - 2^14 */
+};
 
 #define FL_FORCE_RPORT  (1 << 0)  /* force rport */
 #define FL_FORCE_ACTIVE (1 << 1)  /* force active SDP */
diff --git a/parser/parse_methods.c b/parser/parse_methods.c
index aeadee8..3ba42ce 100644
--- a/parser/parse_methods.c
+++ b/parser/parse_methods.c
@@ -155,9 +155,14 @@ int parse_method(str* _next, enum request_method* _method)
  			_next->len -= 5;
  			_next->s += 5;
  			return 1;
- 		} else {
- 			goto unknown;
  		}
+ 		if ((_next->len > 6) && !strncasecmp(_next->s + 1, "ublish", 6)) {
+ 			*_method = METHOD_PUBLISH;
+ 			_next->len -= 7;
+ 			_next->s += 7;
+ 			return 1;
+ 		}
+ 		goto unknown;
 
  	case 'R':
  	case 'r':
@@ -221,7 +226,7 @@ int parse_method(str* _next, enum request_method* _method)
  
  /* 
   * Parse comma separated list of methods pointed by _body and assign their
-  * enum bits to _methods.  Returns 1 on success and 0 on failure.
+  * enum bits to _methods.  Returns 0 on success and -1 on failure.
   */
  int parse_methods(str* _body, unsigned int* _methods)
  {
@@ -232,7 +237,7 @@ int parse_method(str* _next, enum request_method* _method)
  
 	if (!_body || !_methods) {
 		LOG(L_ERR, "parse_methods: Invalid parameter value\n");
-		return 0;
+		return -1;
 	}
 
 	next.len = _body->len;
@@ -240,19 +245,18 @@ int parse_method(str* _next, enum request_method* _method)
  
  	trim_leading(&next);
  
+  	*_methods = 0;
+ 
  	if (next.len == 0) {
- 		LOG(L_ERR, "ERROR: parse_methods: Empty body\n");
  		return 0;
  	}
 
-  	*_methods = 0;
- 
  	while (1) {
  		if (parse_method(&next, &method)) {
  			*_methods |= method;
  		} else {
  			LOG(L_ERR, "ERROR: parse_methods: Invalid method\n");
- 			return 0;
+ 			return -1;
  		}
 		
  		trim_leading(&next);
@@ -267,12 +271,12 @@ int parse_method(str* _next, enum request_method* _method)
  				}
  			} else {
  				LOG(L_ERR, "ERROR: parse_methods: Comma expected\n");
- 				return 0;
+ 				return -1;
  			}
  		} else {
  			break;
  		}
  	}
 
- 	return 1;
+ 	return 0;
  }




More information about the sr-dev mailing list