/* * $Id$ * * * Copyright (C) 2001-2003 Fhg Fokus * * This file is part of ser, a free SIP server. * * ser is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version * * For a license to use the ser software under conditions * other than those described here, or to purchase support for this * software, please contact iptel.org by e-mail at the following addresses: * info@iptel.org * * ser is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "../dprint.h" #include "../str.h" #include "../ut.h" #include "parse_content.h" typedef struct type_node_s { char c; unsigned char final; unsigned char nr_sons; int next; }type_node_t; char* parse_content_length( char* buffer, char* end, int* length) { int number; char *p; int size; p = buffer; /* search the begining of the number */ while ( p='0' && *p<='9') { number = number*10 + (*p)-'0'; size ++; p++; } if (p==end || size==0) goto error; /* now we should have only spaces at the end */ while ( 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 || node==0) goto error; if (node!=-1) node = type_tree[node].final; /* search the '/' separator */ while ( 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==end || node==0) goto error; if (node!=-1) mime = subtype_tree[node].final; /* now its possible to have some spaces */ while ( p