Browse Source

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 năm trước cách đây
mục cha
commit
4d329576b6
2 tập tin đã thay đổi với 59 bổ sung48 xóa
  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