rem: int mime;
add: long mime;
context: int parse_content_type_hdr( struct sip_msg *msg ){	static type_node_t type_tree[] = {		{'t',-1,1,4}, {'e',-1,1,-1}, {'x',-1,1,-1}, {'t',0,0,-1},		{'m',-1,1,11}, {'e',-1,1,-1}, {'s',-1,1,-1}, {'s',-1,1,-1},			{'a',-1,1,-1},{'g',-1,1,-1}, {'e',5,0,-1},		{'a',-1,1,-1}, {'p',-1,1,-1}, {'p',-1,1,-1}, {'l',-1,1,-1},			{'i',-1,1,-1},{'c',-1,1,-1},{'a',-1,1,-1},{'t',-1,1,-1},			{'i',-1,1,-1},{'o',-1,1,-1},{'n',9,0,-1}	};	static type_node_t subtype_tree[] = {		{'p',0,1,5}, {'l',0,1,-1}, {'a',0,1,-1}, {'i',0,1,-1},			{'n',CONTENT_TYPE_TEXT_PLAIN,0,-1},		{'c',0,1,9}, {'p',0,1,-1}, {'i',0,1,-1},			{'m',CONTENT_TYPE_MESSAGE_CPIM,0,-1},		{'s',0,1,-1}, {'d',0,1,-1},			{'p',CONTENT_TYPE_APPLICATION_SDP,0,-1},	};	int node;	int mime;	char *mark;	char *p, *end;	/* is the header already found? */	if ( msg->content_type==0 ) {		/* if not, found it */		if ( parse_headers(msg,HDR_CONTENTTYPE,0)==-1)			return -1;		if ( msg->content_type==0 ) {			LOG(L_ERR,"ERROR:parse_content_type_header: missing Content-Type"					"header\n");			return -1;		}	}	/* maybe the header is already parsed! */	if ( get_content_type(msg)!=CONTENT_TYPE_UNPARSED)		return get_content_type(msg);	/* it seams we have to parse it! :-( */	p = msg->content_type->body.s;	end = p + msg->content_type->body.len;	mime = CONTENT_TYPE_UNKNOWN;	/* search the begining of the type */	while ( p<end && (*p==' ' || *p=='\t' ||	(*p=='\n' && (*(p+1)==' '||*(p+1)=='\t')) ))		p++;	if (p==end)		goto error;	/* parse the type */	node = 0;	mark = p;	while (p<end && ((*p>='a' && *p<='z') || (*p>='A' && *p<='Z')) ) {		while ( node!=-1 && type_tree[node].c!=*p && type_tree[node].c+32!=*p){			node = type_tree[node].next;		}		if (node!=-1 && type_tree[node].nr_sons)			node++;		p++;	}	if (p==end || mark==p)		goto error;	if (node!=-1)		node = type_tree[node].final;	/* search the '/' separator */	while ( p<end && (*p==' ' || *p=='\t' ||	(*p=='\n' && (*(p+1)==' '||*(p+1)=='\t')) ))		p++;	if ( p==end || *(p++)!='/')		goto error;	/* search the begining of the sub-type */	while ( p<end && (*p==' ' || *p=='\t' ||	(*p=='\n' && (*(p+1)==' '||*(p+1)=='\t')) ))		p++;	if (p==end)		goto error;	/* parse the sub-type */	mark = p;	while (p<end && ((*p>='a' && *p<='z') || (*p>='A' && *p<='Z')) ) {		while(node!=-1&&subtype_tree[node].c!=*p&&subtype_tree[node].c+32!=*p)			node = subtype_tree[node].next;		if (node!=-1 && subtype_tree[node].nr_sons)			node++;		p++;	}	if (p==mark)		goto error;	if (node!=-1)		mime = subtype_tree[node].final;	/* now its possible to have some spaces */	while ( p<end && (*p==' ' || *p=='\t' ||	(*p=='\n' && (*(p+1)==' '||*(p+1)=='\t')) ))		p++;	/* is this the end? if there are params, ignore them!! */	if ( *p!=';' && p!=end )		goto error;	mime = ((mime==-1)?CONTENT_TYPE_UNKNOWN:mime);	(int)(msg->content_type->parsed) = mime;	return mime;error:	LOG(L_ERR,"ERROR:parse_content_type: parse error near char [%d][%c] "		"offset=%d\n",*p,*p,p-msg->content_type->body.s);	return -1;}