Pārlūkot izejas kodu

added mime subtype xml+msrtc.pidf, needed by PA, and fixed some errors in parse tables. All types and subtypes tested by startup code in PA

Jamey Hicks 20 gadi atpakaļ
vecāks
revīzija
4d329576b6
2 mainītis faili ar 59 papildinājumiem un 48 dzēšanām
  1. 58 48
      parser/parse_content.c
  2. 1 0
      parser/parse_content.h

+ 58 - 48
parser/parse_content.c

@@ -45,7 +45,7 @@
 
 
 #define is_mime_char(_c_) \
-	(isalpha((int)_c_) || (_c_)=='-' || (_c_)=='+')
+	(isalpha((int)_c_) || (_c_)=='-' || (_c_)=='+' || (_c_)=='.')
 #define is_char_equal(_c_,_cs_) \
 	( (isalpha((int)_c_)?(((_c_)|0x20)==(_cs_)):((_c_)==(_cs_)))==1 )
 
@@ -63,18 +63,26 @@ typedef struct type_node_s {
 
 
 static type_node_t type_tree[] = {
-	{'t',TYPE_UNKNOWN,1,4},
+	{'t',TYPE_UNKNOWN,1,4}, /* 0 */
 		{'e',TYPE_UNKNOWN,1,-1},
 			{'x',TYPE_UNKNOWN,1,-1},
 				{'t',TYPE_TEXT,0,-1},
-	{'m',TYPE_UNKNOWN,1,11},
-		{'e',TYPE_UNKNOWN,1,-1},
+	{'m',TYPE_UNKNOWN,2,19}, /* 4 */
+		{'e',TYPE_UNKNOWN,1,11}, /* 5 */
 			{'s',TYPE_UNKNOWN,1,-1},
 				{'s',TYPE_UNKNOWN,1,-1},
 					{'a',TYPE_UNKNOWN,1,-1},
 						{'g',TYPE_UNKNOWN,1,-1},
 							{'e',TYPE_MESSAGE,0,-1},
-	{'a',TYPE_UNKNOWN,1,22},
+		{'u',TYPE_UNKNOWN,1,-1}, /* 11 */
+			{'l',TYPE_UNKNOWN,1,-1},
+				{'t',TYPE_UNKNOWN,1,-1},
+					{'i',TYPE_UNKNOWN,1,-1},
+						{'p',TYPE_UNKNOWN,1,-1},
+							{'a',TYPE_UNKNOWN,1,-1},
+								{'r',TYPE_UNKNOWN,1,-1},
+									{'t',TYPE_MULTIPART,0,-1},
+	{'a',TYPE_UNKNOWN,1,-1}, /* 19 */
 		{'p',TYPE_UNKNOWN,1,-1},
 			{'p',TYPE_UNKNOWN,1,-1},
 				{'l',TYPE_UNKNOWN,1,-1},
@@ -85,15 +93,6 @@ static type_node_t type_tree[] = {
 									{'i',TYPE_UNKNOWN,1,-1},
 										{'o',TYPE_UNKNOWN,1,-1},
 											{'n',TYPE_APPLICATION,0,-1},
-	{'m',TYPE_UNKNOWN,1,-1},
-		{'u',TYPE_UNKNOWN,1,-1},
-			{'l',TYPE_UNKNOWN,1,-1},
-				{'t',TYPE_UNKNOWN,1,-1},
-					{'i',TYPE_UNKNOWN,1,-1},
-						{'p',TYPE_UNKNOWN,1,-1},
-							{'a',TYPE_UNKNOWN,1,-1},
-								{'r',TYPE_UNKNOWN,1,-1},
-									{'t',TYPE_MULTIPART,0,-1},
 	};
 
 static type_node_t subtype_tree[] = {
@@ -102,18 +101,18 @@ static type_node_t subtype_tree[] = {
 			{'a',SUBTYPE_UNKNOWN,1,-1},
 				{'i',SUBTYPE_UNKNOWN,1,-1},
 					{'n',SUBTYPE_PLAIN,0,-1},
-		{'i',SUBTYPE_UNKNOWN,1,-1},
+		{'i',SUBTYPE_UNKNOWN,1,-1}, /* 5 */
 			{'d',SUBTYPE_UNKNOWN,1,-1},
 				{'f',SUBTYPE_UNKNOWN,1,-1},
-					{'i',SUBTYPE_UNKNOWN,1,-1},
-						{'+',TYPE_UNKNOWN,1,-1},
-							{'x',TYPE_UNKNOWN,1,-1},
-								{'m',TYPE_UNKNOWN,1,-1},
+					{'+',TYPE_UNKNOWN,1,-1},
+						{'x',TYPE_UNKNOWN,1,-1},
+							{'m',TYPE_UNKNOWN,1,-1},
+								{'l',SUBTYPE_PIDFXML,0,-1},
 									{'l',SUBTYPE_PIDFXML,0,-1},
-	{'s',SUBTYPE_UNKNOWN,1,16},
+	{'s',SUBTYPE_UNKNOWN,1,16}, /* 13 */
 		{'d',SUBTYPE_UNKNOWN,1,-1},
 			{'p',SUBTYPE_SDP,0,-1},
-	{'c',SUBTYPE_UNKNOWN,1,25},
+	{'c',SUBTYPE_UNKNOWN,1,25}, /* 16 */
 		{'p',SUBTYPE_UNKNOWN,2,-1},
 			{'i',SUBTYPE_UNKNOWN,1,20},
 				{'m',SUBTYPE_CPIM,0,-1},
@@ -122,31 +121,30 @@ static type_node_t subtype_tree[] = {
 					{'x',TYPE_UNKNOWN,1,-1},
 						{'m',TYPE_UNKNOWN,1,-1},
 							{'l',SUBTYPE_CPLXML,0,-1},
-	{'r',SUBTYPE_UNKNOWN,2,39},
-		{'l',SUBTYPE_UNKNOWN,1,42},
+	{'r',SUBTYPE_UNKNOWN,2,39}, /* 25 */
+		{'l',SUBTYPE_UNKNOWN,1,33},/* 26 */
 			{'m',SUBTYPE_UNKNOWN,1,-1},
 				{'i',SUBTYPE_UNKNOWN,1,-1},
 					{'+',TYPE_UNKNOWN,1,-1},
 						{'x',TYPE_UNKNOWN,1,-1},
 							{'m',TYPE_UNKNOWN,1,-1},
 								{'l',SUBTYPE_RLMIXML,0,-1},
-		{'e',SUBTYPE_UNKNOWN,1,-1},
+		{'e',SUBTYPE_UNKNOWN,1,-1}, /* 33 */
 			{'l',SUBTYPE_UNKNOWN,1,-1},
 				{'a',SUBTYPE_UNKNOWN,1,-1},
 					{'t',SUBTYPE_UNKNOWN,1,-1},
 						{'e',SUBTYPE_UNKNOWN,1,-1},
 							{'d',SUBTYPE_RELATED,0,-1},
-	{'l',SUBTYPE_UNKNOWN,1,49},
+	{'l',SUBTYPE_UNKNOWN,1,48}, /* 39 */
 		{'p',SUBTYPE_UNKNOWN,1,-1},
 			{'i',SUBTYPE_UNKNOWN,1,-1},
 				{'d',SUBTYPE_UNKNOWN,1,-1},
 					{'f',SUBTYPE_UNKNOWN,1,-1},
-						{'i',SUBTYPE_UNKNOWN,1,-1},
-							{'+',TYPE_UNKNOWN,1,-1},
-								{'x',TYPE_UNKNOWN,1,-1},
-									{'m',TYPE_UNKNOWN,1,-1},
-										{'l',SUBTYPE_LPIDFXML,0,-1},
-	{'w',SUBTYPE_UNKNOWN,1,64},
+						{'+',SUBTYPE_UNKNOWN,1,-1},
+							{'x',SUBTYPE_UNKNOWN,1,-1},
+								{'m',SUBTYPE_UNKNOWN,1,-1},
+									{'l',SUBTYPE_LPIDFXML,0,-1},
+	{'w',SUBTYPE_UNKNOWN,1,63}, /* 48 */
 		{'a',SUBTYPE_UNKNOWN,1,-1},
 			{'t',SUBTYPE_UNKNOWN,1,-1},
 				{'c',SUBTYPE_UNKNOWN,1,-1},
@@ -161,29 +159,41 @@ static type_node_t subtype_tree[] = {
 													{'x',TYPE_UNKNOWN,1,-1},
 														{'m',TYPE_UNKNOWN,1,-1},
 															{'l',SUBTYPE_WATCHERINFOXML,0,-1},
-	{'x',SUBTYPE_UNKNOWN,1,74},
-		{'p',SUBTYPE_UNKNOWN,1,-1},
+	{'x',SUBTYPE_UNKNOWN,2,85}, /* 63 */
+		{'p',SUBTYPE_UNKNOWN,1,72}, /* 64 */
 			{'i',SUBTYPE_UNKNOWN,1,-1},
 				{'d',SUBTYPE_UNKNOWN,1,-1},
 					{'f',SUBTYPE_UNKNOWN,1,-1},
-						{'i',SUBTYPE_UNKNOWN,1,-1},
-							{'+',TYPE_UNKNOWN,1,-1},
-								{'x',TYPE_UNKNOWN,1,-1},
-									{'m',TYPE_UNKNOWN,1,-1},
-										{'l',SUBTYPE_XPIDFXML,0,-1},
-	{'e',SUBTYPE_UNKNOWN,1,-1},
+						{'+',SUBTYPE_UNKNOWN,1,-1},
+							{'x',SUBTYPE_UNKNOWN,1,-1},
+								{'m',SUBTYPE_UNKNOWN,1,-1},
+									{'l',SUBTYPE_XPIDFXML,0,-1},
+		{'m',SUBTYPE_UNKNOWN,1,-1}, /* 72 */
+			{'l',SUBTYPE_UNKNOWN,1,-1},
+				{'+',SUBTYPE_UNKNOWN,1,-1},
+					{'m',SUBTYPE_UNKNOWN,1,-1},
+						{'s',SUBTYPE_UNKNOWN,1,-1},
+							{'r',SUBTYPE_UNKNOWN,1,-1},
+								{'t',SUBTYPE_UNKNOWN,1,-1},
+									{'c',SUBTYPE_UNKNOWN,1,-1},
+										{'.',SUBTYPE_UNKNOWN,1,-1},
+											{'p',SUBTYPE_UNKNOWN,1,-1},
+												{'i',SUBTYPE_UNKNOWN,1,-1}, 
+													{'d',SUBTYPE_UNKNOWN,1,-1},
+														{'f',SUBTYPE_XML_MSRTC_PIDF,0,-1},
+	{'e',SUBTYPE_UNKNOWN,1,-1}, /* 85 */
 		{'x',SUBTYPE_UNKNOWN,1,-1},
 			{'t',SUBTYPE_UNKNOWN,1,-1},
 				{'e',SUBTYPE_UNKNOWN,1,-1},
 					{'r',SUBTYPE_UNKNOWN,1,-1},
 						{'n',SUBTYPE_UNKNOWN,1,-1},
-							{'a',TYPE_UNKNOWN,1,-1},
-								{'l',TYPE_UNKNOWN,1,-1},
-									{'-',TYPE_UNKNOWN,1,-1},
-										{'b',SUBTYPE_LPIDFXML,0,-1},
-											{'o',TYPE_UNKNOWN,1,-1},
-												{'d',TYPE_UNKNOWN,1,-1},
-													{'y',SUBTYPE_EXTERNAL_BODY,1,-1},
+							{'a',SUBTYPE_UNKNOWN,1,-1},
+								{'l',SUBTYPE_UNKNOWN,1,-1},
+									{'-',SUBTYPE_UNKNOWN,1,-1},
+										{'b',SUBTYPE_UNKNOWN,1,-1},
+											{'o',SUBTYPE_UNKNOWN,1,-1},
+												{'d',SUBTYPE_UNKNOWN,1,-1},
+													{'y',SUBTYPE_EXTERNAL_BODY,0,-1},
 
 	};
 
@@ -322,14 +332,14 @@ char* decode_mime_type(char *start, char *end, unsigned int *mime_type)
 
 	/* check the format of the decoded mime */
 	if ((*mime_type)>>16==TYPE_ALL && ((*mime_type)&0x00ff)!=SUBTYPE_ALL) {
-		LOG(L_ERR,"ERROR:decode_mine_type: invalid mime format found "
+		LOG(L_ERR,"ERROR:decode_mime_type: invalid mime format found "
 			" <*/submime> in [%.*s]!!\n", (int)(end-start),start);
 		return 0;
 	}
 
 	return p;
 error:
-	LOG(L_ERR,"ERROR:decode_mine_type: parse error near in [%.*s] char"
+	LOG(L_ERR,"ERROR:decode_mime_type: parse error near in [%.*s] char"
 		"[%d][%c] offset=%d\n", (int)(end-start),start,*p,*p,(int)(p-start));
 	return 0;
 }

+ 1 - 0
parser/parse_content.h

@@ -60,6 +60,7 @@ struct mime_type {
 #define SUBTYPE_XPIDFXML     9
 #define SUBTYPE_WATCHERINFOXML     10
 #define SUBTYPE_EXTERNAL_BODY      11
+#define SUBTYPE_XML_MSRTC_PIDF     12
 #define SUBTYPE_ALL          0xfe
 #define SUBTYPE_UNKNOWN      0xff