Browse Source

bugs fixed

Jan Janak 22 years ago
parent
commit
644cd74120
3 changed files with 25 additions and 23 deletions
  1. 1 1
      parser/parse_param.c
  2. 18 17
      parser/parse_rr.c
  3. 6 5
      parser/parse_rr.h

+ 1 - 1
parser/parse_param.c

@@ -395,7 +395,7 @@ static inline void print_param(param_t* _p)
 	printf("name: \'%.*s\'\n", _p->name.len, _p->name.s);
 	printf("name: \'%.*s\'\n", _p->name.len, _p->name.s);
 	printf("body: \'%.*s\'\n", _p->body.len, _p->body.s);
 	printf("body: \'%.*s\'\n", _p->body.len, _p->body.s);
 	
 	
-	printf("---/cparam---\n");
+	printf("---/param---\n");
 }
 }
 
 
 
 

+ 18 - 17
parser/parse_rr.c

@@ -30,30 +30,32 @@
 #include <stdio.h>
 #include <stdio.h>
 #include <string.h>
 #include <string.h>
 #include "parse_rr.h"
 #include "parse_rr.h"
-#include "../../mem/mem.h"
-#include "../../dprint.h"
-#include "../../trim.h"
+#include "../mem/mem.h"
+#include "../dprint.h"
+#include "../trim.h"
 
 
 
 
 /*
 /*
  * Parse Route and Record-Route header fields
  * Parse Route and Record-Route header fields
  */
  */
-int parse_rr(str* _s, rr_t** _r)
+int parse_rr(struct hdr_field* _h)
 {
 {
-	rr_t* r, *res, *last;
+	rr_t* r, *last;
 	str s;
 	str s;
 	param_hooks_t hooks;
 	param_hooks_t hooks;
 
 
-	if (!_s || !_r) {
+	if (!_h) {
 		LOG(L_ERR, "parse_rr(): Invalid parameter value\n");
 		LOG(L_ERR, "parse_rr(): Invalid parameter value\n");
 		return -1;
 		return -1;
 	}
 	}
 
 
+
 	     /* Make a temporary copy of the string */
 	     /* Make a temporary copy of the string */
-	s.s = _s->s;
-	s.len = _s->len;
+	s.s = _h->body.s;
+	s.len = _h->body.len;
+	trim_leading(&s);
 
 
-	res = last = 0;
+	last = 0;
 
 
 	while(1) {
 	while(1) {
 		     /* Allocate and clear rr stucture */
 		     /* Allocate and clear rr stucture */
@@ -66,7 +68,7 @@ int parse_rr(str* _s, rr_t** _r)
 		memset(r, 0, sizeof(rr_t));
 		memset(r, 0, sizeof(rr_t));
 		
 		
 		     /* Parse name-addr part of the header */
 		     /* Parse name-addr part of the header */
-		if (parse_nameaddr(_s, &r->nameaddr) < 0) {
+		if (parse_nameaddr(&s, &r->nameaddr) < 0) {
 			LOG(L_ERR, "parse_rr(): Error while parsing name-addr\n");
 			LOG(L_ERR, "parse_rr(): Error while parsing name-addr\n");
 			goto error;
 			goto error;
 		}
 		}
@@ -112,19 +114,18 @@ int parse_rr(str* _s, rr_t** _r)
 		}
 		}
 
 
 		     /* Append the structure as last parameter of the linked list */
 		     /* Append the structure as last parameter of the linked list */
-		if (!res) res = r;
+		if (!_h->parsed) (rr_t*)_h->parsed = r;
 		if (last) last->next = r;
 		if (last) last->next = r;
 		last = r;
 		last = r;
 	}
 	}
 
 
  error:
  error:
 	if (r) pkg_free(r);
 	if (r) pkg_free(r);
-	free_rr(res); /* Free any contacts created so far */
+	free_rr((rr_t**)&_h->parsed); /* Free any contacts created so far */
 	return -1;
 	return -1;
 
 
  ok:
  ok:
 	if (last) last->next = r;
 	if (last) last->next = r;
-	*_r = res;
 	return 0;
 	return 0;
 }
 }
 
 
@@ -133,13 +134,13 @@ int parse_rr(str* _s, rr_t** _r)
  * Free list of rrs
  * Free list of rrs
  * _r is head of the list
  * _r is head of the list
  */
  */
-void free_rr(rr_t* _r)
+void free_rr(rr_t** _r)
 {
 {
 	rr_t* ptr;
 	rr_t* ptr;
 
 
-	while(_r) {
-		ptr = _r;
-		_r = _r->next;
+	while(*_r) {
+		ptr = *_r;
+		*_r = (*_r)->next;
 		if (ptr->params) {
 		if (ptr->params) {
 			free_params(ptr->params);
 			free_params(ptr->params);
 		}
 		}

+ 6 - 5
parser/parse_rr.h

@@ -31,9 +31,10 @@
 #ifndef PARSE_RR_H
 #ifndef PARSE_RR_H
 #define PARSE_RR_H
 #define PARSE_RR_H
 
 
-#include "../../str.h"
-#include "../parse_nameaddr.h"
-#include "../parse_param.h"
+
+#include "parse_nameaddr.h"
+#include "parse_param.h"
+#include "hf.h"
 
 
 
 
 /*
 /*
@@ -51,14 +52,14 @@ typedef struct rr {
 /*
 /*
  * Parse Route & Record-Route header fields
  * Parse Route & Record-Route header fields
  */
  */
-int parse_rr(str* _s, rr_t** _r);
+int parse_rr(struct hdr_field* _r);
 
 
 
 
 /*
 /*
  * Free list of rr
  * Free list of rr
  * _c is head of the list
  * _c is head of the list
  */
  */
-void free_rr(rr_t* _r);
+void free_rr(rr_t** _r);
 
 
 
 
 /*
 /*