Explorar o código

*** empty log message ***

Jan Janak %!s(int64=23) %!d(string=hai) anos
pai
achega
8dd851486f
Modificáronse 3 ficheiros con 87 adicións e 0 borrados
  1. 6 0
      parser/hf.c
  2. 5 0
      parser/msg_parser.c
  3. 76 0
      trim.h

+ 6 - 0
parser/hf.c

@@ -9,6 +9,7 @@
 #include "../dprint.h"
 #include "../mem/mem.h"
 #include "parse_def.h"
+#include "digest/digest.h" /* free_credentials */
 
 
 /* 
@@ -31,6 +32,11 @@ void clean_hdr_field(struct hdr_field* hf)
 			free_cseq(hf->parsed);
 			break;
 
+                case HDR_AUTHORIZATION:
+		case HDR_PROXYAUTH:
+			free_credentials((auth_body_t**)(&(hf->parsed));
+			break;
+
 		case HDR_FROM:
 			free_to(hf->parsed);
 			break;

+ 5 - 0
parser/msg_parser.c

@@ -187,6 +187,11 @@ int parse_headers(struct sip_msg* msg, int flags, int next)
 
 	end=msg->buf+msg->len;
 	tmp=msg->unparsed;
+	
+	if (next) {
+		orig_flag = msg->parsed_flag;
+		msg->parsed_flag &= ~flags;
+	}
 
 	if (next) {
 		orig_flag = msg->parsed_flag;

+ 76 - 0
trim.h

@@ -0,0 +1,76 @@
+/* $Id$ */
+
+#ifndef TRIM_H
+#define TRIM_H
+
+#include "str.h"
+
+
+/*
+ * This switch-case statement is used in
+ * trim_leading and trim_trailing. You can
+ * define char that should be skipped here.
+ */
+#define TRIM_SWITCH(c) switch(c) {     \
+                       case ' ':       \
+                       case '\t':      \
+                       case '\r':      \
+                       case '\n':      \
+                               break;  \
+                                       \
+                       default:        \
+                               return; \
+                       }
+
+
+/*
+ * Remove any leading whitechars, like spaces,
+ * horizontal tabs, carriage returns and line
+ * feeds
+ *
+ * WARNING: String descriptor structure will be
+ *          modified ! Make a copy otherwise you
+ *          might be unable to free _s->s for
+ *          example !
+ *
+ */
+static inline void trim_leading(str* _s)
+{
+	for(; _s->len > 0; _s->len--, _s->s++) {
+		TRIM_SWITCH(*(_s->s));
+	}
+}
+
+
+/*
+ * Remove any trailing white char, like spaces,
+ * horizontal tabs, carriage returns and line feeds
+ *
+ * WARNING: String descriptor structure will be
+ *          modified ! Make a copy otherwise you
+ *          might be unable to free _s->s for
+ *          example !
+ */
+static inline void trim_trailing(str* _s)
+{
+	for(; _s->len > 0; _s->len--) {
+		TRIM_SWITCH(_s->s[_s->len - 1]);
+	}
+}
+
+
+/*
+ * Do trim_leading and trim_trailing
+ *
+ * WARNING: String structure will be modified !
+ *          Make a copy otherwise you might be
+ *          unable to free _s->s for example !
+ */
+static inline void trim(str* _s)
+{
+	trim_leading(_s);
+	trim_trailing(_s);
+}
+
+
+#endif