/* * This file is part of rasdaman community. * * Rasdaman community 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 3 of the License, or * (at your option) any later version. * * Rasdaman community 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 rasdaman community. If not, see . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . */ /*------------------------------------------------------------------------*/ /* http-fields.c - get and set HTTP Header fieldnames. */ /*------------------------------------------------------------------------*/ #include "defs.h" #include "protos.h" #include "server.h" #include "http-defs.h" #include "http.h" struct KeywordKey FieldnameKeyTable[] = { { "Accept" , HKEY_Accept }, { "Accept-Charset" , HKEY_Accept_Charset }, { "Accept-Encoding" , HKEY_Accept_Encoding }, { "Accept-Language" , HKEY_Accept_Language }, { "Accept-Ranges" , HKEY_Accept_Ranges }, { "Accept-charset" , HKEY_Accept_Charset }, { "Accept-encoding" , HKEY_Accept_Encoding }, { "Accept-language" , HKEY_Accept_Language }, { "Accept-ranges" , HKEY_Accept_Ranges }, { "Age" , HKEY_Age }, { "Allow" , HKEY_Allow }, { "Authorization" , HKEY_Authorization }, { "Cache-Control" , HKEY_Cache_Control }, { "Cache-control" , HKEY_Cache_Control }, { "Compliance" , HKEY_Compliance }, { "Connection" , HKEY_Connection }, { "Content-Base" , HKEY_Content_Base }, { "Content-Encoding" , HKEY_Content_Encoding }, { "Content-Language" , HKEY_Content_Language }, { "Content-Length" , HKEY_Content_Length }, { "Content-Location" , HKEY_Content_Location }, { "Content-MD5" , HKEY_Content_MD5 }, { "Content-Range" , HKEY_Content_Range }, { "Content-Type" , HKEY_Content_Type }, { "Content-base" , HKEY_Content_Base }, { "Content-encoding" , HKEY_Content_Encoding }, { "Content-language" , HKEY_Content_Language }, { "Content-length" , HKEY_Content_Length }, { "Content-location" , HKEY_Content_Location }, { "Content-range" , HKEY_Content_Range }, { "Content-type" , HKEY_Content_Type }, { "Date" , HKEY_Date }, { "ETag" , HKEY_ETag }, { "Expect" , HKEY_Expect }, { "Expires" , HKEY_Expires }, { "From" , HKEY_From }, { "Host" , HKEY_Host }, { "If-Modified-Since" , HKEY_If_Modified_Since }, { "If-Match" , HKEY_If_Match }, { "If-None-Match" , HKEY_If_None_Match }, { "If-Range" , HKEY_If_Range }, { "If-Unmodified-Since" , HKEY_If_Unmodified_Since }, { "Keep-Alive" , HKEY_Keep_Alive }, { "Last-Modified" , HKEY_Last_Modified }, { "Location" , HKEY_Location }, { "Max-Forwards" , HKEY_Max_Forwards }, { "Non-Compliance" , HKEY_Non_Compliance }, { "Pragma" , HKEY_Pragma }, { "Proxy-Authenticate" , HKEY_Proxy_Authenticate }, { "Proxy-Authorization" , HKEY_Proxy_Authorization }, { "Public" , HKEY_Public }, { "Range" , HKEY_Range }, { "Referer" , HKEY_Referer }, { "Retry-After" , HKEY_Retry_After }, { "Server" , HKEY_Server }, { "Set-Proxy" , HKEY_Set_Proxy }, { "Transfer-Encoding" , HKEY_Transfer_Encoding }, { "Upgrade" , HKEY_Upgrade }, { "User-Agent" , HKEY_User_Agent }, { "Vary" , HKEY_Vary }, { "WWW-Authenticate" , HKEY_WWW_Authenticate }, { "Warning" , HKEY_Warning }, }; #define NUM_FIELDS 62 /****** http-fields/HTTP_GetHKey ********************************************* * * NAME * * * SYNOPSIS * * * FUNCTION * * * INPUTS * * * RESULT * * * NOTES * * * BUGS * * * SEE ALSO * * ****************************************************************************** * */ int HTTP_GetHKey( char *Keyword ) { int cond; int low; int high; int mid; int check[ NUM_FIELDS ]; int i; low = 0; high = NUM_FIELDS - 1; for( i = 0; i < NUM_FIELDS; i++ ) check[ i ] = 0; while( low <= high ) { mid = ( low + high ) / 2; if( ( cond = strcmp( Keyword, FieldnameKeyTable[mid].Keyword ) ) < 0 ) { if( check[mid] == 0 ) { check[mid] = 1; high = mid - 1; } else return( HKEY_UNKNOWN ); } else if( cond > 0 ) { if( check[mid] == 0 ) { check[mid] = 1; low = mid + 1; } else return( HKEY_UNKNOWN ); } else return( FieldnameKeyTable[mid].Key ); } return( HKEY_UNKNOWN ); } /****** http-fields/HTTP_GetFieldName **************************************** * * NAME * * * SYNOPSIS * * * FUNCTION * * * INPUTS * * * RESULT * * * NOTES * * * BUGS * * * SEE ALSO * * ****************************************************************************** * */ char *HTTP_GetFieldName( int Key ) { int i; for( i = 0; i < NUM_FIELDS; i++ ) { if( FieldnameKeyTable[i].Key == Key ) return( FieldnameKeyTable[i].Keyword ); } return( NULL ); }