Jelajahi Sumber

Hook up Server header field support.

Maxim Sobolev 18 tahun lalu
induk
melakukan
fbac8f847d
6 mengubah file dengan 15 tambahan dan 0 penghapusan
  1. 3 0
      parser/hf.c
  2. 2 0
      parser/hf.h
  3. 2 0
      parser/keys.h
  4. 5 0
      parser/msg_parser.c
  5. 1 0
      parser/msg_parser.h
  6. 2 0
      parser/parse_hname2.c

+ 3 - 0
parser/hf.c

@@ -157,6 +157,9 @@ void clean_hdr_field(struct hdr_field* hf)
 		case HDR_USERAGENT_T:
 			break;
 
+		case HDR_SERVER_T:
+			break;
+
 		case HDR_ACCEPTDISPOSITION_T:
 			break;
 

+ 2 - 0
parser/hf.h

@@ -84,6 +84,7 @@ enum _hdr_types_t {
 	HDR_PRIORITY_T				       /* Priority header field */,
 	HDR_SUBJECT_T				       /* Subject header field */,
 	HDR_USERAGENT_T				       /* User-Agent header field */,
+	HDR_SERVER_T				       /* Server header field */,
 	HDR_ACCEPTDISPOSITION_T		       /* Accept-Disposition hdr field */,
 	HDR_CONTENTDISPOSITION_T	       /* Content-Disposition hdr field */,
 	HDR_DIVERSION_T				       /* Diversion header field */,
@@ -150,6 +151,7 @@ typedef unsigned long long hdr_flags_t;
 #define HDR_PRIORITY_F				HDR_F_DEF(PRIORITY)
 #define HDR_SUBJECT_F				HDR_F_DEF(SUBJECT)
 #define HDR_USERAGENT_F				HDR_F_DEF(USERAGENT)
+#define HDR_SERVER_F				HDR_F_DEF(SERVER)
 #define HDR_ACCEPTDISPOSITION_F		HDR_F_DEF(ACCEPTDISPOSITION)
 #define HDR_CONTENTDISPOSITION_F	HDR_F_DEF(CONTENTDISPOSITION)
 #define HDR_DIVERSION_F				HDR_F_DEF(DIVERSION)

+ 2 - 0
parser/keys.h

@@ -135,6 +135,8 @@
 #define _ispo_ 0x6f707369   /* "ispo" */
 #define _siti_ 0x69746973   /* "siti" */
 
+#define _serv_ 0x76726573   /* "serv" */
+
 #define _dive_ 0x65766964   /* "dive" */
 #define _rsio_ 0x6f697372   /* "rsio" */
 

+ 5 - 0
parser/msg_parser.c

@@ -259,6 +259,7 @@ char* get_hdr_field(char* buf, char* end, struct hdr_field* hdr)
 		case HDR_PRIORITY_T:
 		case HDR_SUBJECT_T:
 		case HDR_USERAGENT_T:
+		case HDR_SERVER_T:
 		case HDR_CONTENTDISPOSITION_T:
 		case HDR_ACCEPTDISPOSITION_T:
 		case HDR_DIVERSION_T:
@@ -482,6 +483,10 @@ int parse_headers(struct sip_msg* msg, hdr_flags_t flags, int next)
 				if (msg->user_agent==0) msg->user_agent = hf;
 				msg->parsed_flag|=HDR_USERAGENT_F;
 				break;
+			case HDR_SERVER_T:
+				if (msg->server==0) msg->server = hf;
+				msg->parsed_flag|=HDR_SERVER_F;
+				break;
 			case HDR_CONTENTDISPOSITION_T:
 				if (msg->content_disposition==0) msg->content_disposition = hf;
 				msg->parsed_flag|=HDR_CONTENTDISPOSITION_F;

+ 1 - 0
parser/msg_parser.h

@@ -232,6 +232,7 @@ struct sip_msg {
 	struct hdr_field* priority;
 	struct hdr_field* subject;
 	struct hdr_field* user_agent;
+	struct hdr_field* server;
 	struct hdr_field* content_disposition;
 	struct hdr_field* accept_disposition;
 	struct hdr_field* diversion;

+ 2 - 0
parser/parse_hname2.c

@@ -83,6 +83,7 @@ static inline char* skip_ws(char* p, unsigned int size)
 #include "case_prio.h"     /* Priority */
 #include "case_subj.h"     /* Subject */
 #include "case_user.h"     /* User-Agent */
+#include "case_serv.h"     /* Server */
 #include "case_supp.h"     /* Supported */
 #include "case_dive.h"     /* Diversion */
 #include "case_remo.h"     /* Remote-Party-ID */
@@ -128,6 +129,7 @@ static inline char* skip_ws(char* p, unsigned int size)
         case _subj_: subj_CASE; \
         case _subs_: subs_CASE; \
         case _user_: user_CASE; \
+        case _serv_: serv_CASE; \
         case _dive_: dive_CASE; \
         case _remo_: remo_CASE; \
         case _refe_: refe_CASE; \