⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmethod.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
字号:
/*								     HTMethod.c**	MANAGES REQUEST METHODS****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTMethod.c,v 2.8 2002/05/29 16:09:13 kirschpi Exp $****** HISTORY:**	6 June 95  HFN	Spawned off from HTAccess. Can be extended to allow**			registration of new methods**      15 Feb 2002 MKP Introduced methods from WebDAV protocol and **                      Extension Methods. (Manuele.Kirsch_Pinheiro@inrialpes.fr**                      or manuele@inf.ufrgs.br)***//* Library Include files */#include "wwwsys.h"#include "HTUtils.h"#include "HTString.h"#include "HTMethod.h"					 /* Implemented here */PRIVATE char *method_names[] ={    "INVALID-METHOD",    "GET",    "HEAD",    "POST",    "PUT",    "PATCH",    "DELETE",    "TRACE",    "OPTIONS",    "LINK",    "UNLINK",#ifdef HT_DAV    "LOCK",                                             /* new methods for */    "UNLOCK",                                           /* webDAV protocol */    "PROPFIND",    "PROPPATCH",    "MKCOL",    "COPY",    "MOVE",#endif /* HT_DAV */#ifdef HT_EXT                                           /* extension methods */    NULL,                                               /* METHOD_EXT_0 */    NULL,                                               /* METHOD_EXT_1 */    NULL,                                               /* METHOD_EXT_2 */    NULL,                                               /* METHOD_EXT_3 */    NULL,                                               /* METHOD_EXT_4 */    NULL,                                               /* METHOD_EXT_5 */    NULL,                                               /* METHOD_EXT_6 */    #endif /* HT_EXT  */    NULL};#ifdef HT_EXT/* This array keeps the information about the presence of** an entity body in each extension method*/PRIVATE BOOL HTEXT_EntityMethods [] = {    NO,         /* METHOD_EXT_0 */    NO,         /* METHOD_EXT_1 */    NO,         /* METHOD_EXT_2 */    NO,         /* METHOD_EXT_3 */    NO,         /* METHOD_EXT_4 */    NO,         /* METHOD_EXT_5 */    NO          /* METHOD_EXT_6 */};#endif/* ------------------------------------------------------------------------- *//*	Get method enum value**	---------------------*/PUBLIC HTMethod HTMethod_enum (const char * name){    if (name) {	if (!strcasecomp(name, *(method_names+1)))	    return METHOD_GET;	else if (!strcasecomp(name, *(method_names+2)))	    return METHOD_HEAD;	else if (!strcasecomp(name, *(method_names+3)))	    return METHOD_POST;	else if (!strcasecomp(name, *(method_names+4)))	    return METHOD_PUT;	else if (!strcasecomp(name, *(method_names+5)))	    return METHOD_PATCH;	else if (!strcasecomp(name, *(method_names+6)))	    return METHOD_DELETE;	else if (!strcasecomp(name, *(method_names+7)))	    return METHOD_TRACE;	else if (!strcasecomp(name, *(method_names+8)))	    return METHOD_OPTIONS;	else if (!strcasecomp(name, *(method_names+9)))	    return METHOD_LINK;	else if (!strcasecomp(name, *(method_names+10)))	    return METHOD_UNLINK;#ifdef HT_DAV        else if (!strcasecomp(name, *(method_names+11)))        /* WebDAV lock/unlock */            return METHOD_LOCK;        else if (!strcasecomp(name, *(method_names+12)))            return METHOD_UNLOCK;        else if (!strcasecomp(name, *(method_names+13)))        /* other WebDAV methods */            return METHOD_PROPFIND;        else if (!strcasecomp(name, *(method_names+14)))            return METHOD_PROPPATCH;            else if (!strcasecomp(name, *(method_names+15)))            return METHOD_MKCOL;        else if (!strcasecomp(name, *(method_names+16)))            return METHOD_COPY;        else if (!strcasecomp(name, *(method_names+17)))                    return METHOD_MOVE;#endif /* HT_DAV */#ifdef HT_EXT                      /* if there is no extension method set, return METHOD_INVALID */        else if ( *(method_names+18) && !strcasecomp(name, *(method_names+18)))            return METHOD_EXT_0;                                        else if ( *(method_names+19) && !strcasecomp(name, *(method_names+19)))            return METHOD_EXT_1;        else if ( *(method_names+20) && !strcasecomp(name, *(method_names+20)))            return METHOD_EXT_2;        else if ( *(method_names+21) && !strcasecomp(name, *(method_names+21)))            return METHOD_EXT_3;        else if ( *(method_names+22) && !strcasecomp(name, *(method_names+22)))            return METHOD_EXT_4;        else if ( *(method_names+23) && !strcasecomp(name, *(method_names+23)))            return METHOD_EXT_5;        else if ( *(method_names+24) && !strcasecomp(name, *(method_names+24)))            return METHOD_EXT_6;#endif      }    return METHOD_INVALID;}/*	Get method name**	---------------**	Returns pointer to entry in static table in memory*/PUBLIC const char * HTMethod_name (HTMethod method){    if (method & METHOD_GET)	return *(method_names+1);    else if (method == METHOD_HEAD)	return *(method_names+2);    else if (method == METHOD_POST)	return *(method_names+3);    else if (method == METHOD_PUT)	return *(method_names+4);    else if (method == METHOD_PATCH)	return *(method_names+5);    else if (method == METHOD_DELETE)	return *(method_names+6);    else if (method == METHOD_TRACE)	return *(method_names+7);    else if (method == METHOD_OPTIONS)	return *(method_names+8);    else if (method == METHOD_LINK)	return *(method_names+9);    else if (method == METHOD_UNLINK)	return *(method_names+10);    #ifdef HT_DAV        else if (method == METHOD_LOCK)                     /* webdav lock/unlock */        return *(method_names+11);                      /* methods (locking)  */    else if (method == METHOD_UNLOCK)        return *(method_names+12);    else if (method == METHOD_PROPFIND)                 /* webdav proppatch/propfind */        return *(method_names+13);                      /* methods (properties)      */    else if (method == METHOD_PROPPATCH)        return *(method_names+14);     else if (method == METHOD_MKCOL)                   /* webdav mkcol method */        return *(method_names+15);                      /* (collencions)       */    else if (method == METHOD_COPY)             return *(method_names+16);                      /* webdav copy/move    */                   else if (method == METHOD_MOVE)                     /* methods (namespace) */        return *(method_names+17);#endif /* HT_DAV */#ifdef HT_EXT        else if (method == METHOD_EXT_0 && (*(method_names+18)))    /* extension methods */        return *(method_names+18);                              /* customizable for the app. */    else if (method == METHOD_EXT_1 && (*(method_names+19)))        return *(method_names+19);    else if (method == METHOD_EXT_2 && (*(method_names+20)))    /* if the method is not set */        return *(method_names+20);                              /* then it will return      */    else if (method == METHOD_EXT_3 && ((*method_names+21)))    /* "INVALID-METHOD"         */        return *(method_names+21);    else if (method == METHOD_EXT_4 && ((*method_names+22)))        return *(method_names+22);    else if (method == METHOD_EXT_5 && ((*method_names+23)))        return *(method_names+23);    else if (method == METHOD_EXT_6 && ((*method_names+24)))        return *(method_names+24);#endif /* HT_EXT */        else	return *method_names;}/* ** Does the method include an entity body? */PUBLIC BOOL HTMethod_hasEntity (HTMethod me) {    if (me) {        /* normal HTTP methods */        if (me & (METHOD_PUT | METHOD_POST)) return YES;#ifdef HT_DAV        /* WebDAV methods */        if (me & (METHOD_LOCK | METHOD_PROPFIND | METHOD_PROPPATCH |            METHOD_COPY | METHOD_MOVE)) return YES;#endif#ifdef HT_EXT        /* extension methods */        HTTRACE (PROT_TRACE, "HTMethod.... Has this extension method a body?\n");        if (me == METHOD_EXT_0) return HTEXT_EntityMethods[0];        else if (me == METHOD_EXT_1) return HTEXT_EntityMethods[1];        else if (me == METHOD_EXT_2) return HTEXT_EntityMethods[2];        else if (me == METHOD_EXT_3) return HTEXT_EntityMethods[3];        else if (me == METHOD_EXT_4) return HTEXT_EntityMethods[4];        else if (me == METHOD_EXT_5) return HTEXT_EntityMethods[5];        else if (me == METHOD_EXT_6) return HTEXT_EntityMethods[6];        else return (NO);#endif    }    return (NO);}/*** Set an extension method: HTMethod structure has 7 methods (METHOD_EXT_0** to METHOD_EXT_6) that can be set by the application.** This function set one of this extension methods. **** Parameters: **             HTMethod method - extension method to be set**             const char name - new name for the method** Return:**         BOOL - YES, if the operation succeed**              - NO, if it failed, for example, if the parameter method is**                                  not a extension method (METHOD_EXT_0 -**                                  METHOD_EXT_6)***/PUBLIC BOOL HTMethod_setExtensionMethod (HTMethod method, const char * name, BOOL hasEntity) {#ifdef HT_EXT    if (name && *name) {        if (method == METHOD_EXT_0) {             StrAllocCopy ((char *)(*(method_names+18)), name);            HTEXT_EntityMethods[0] = hasEntity;        }        else if (method == METHOD_EXT_1) {            StrAllocCopy ((char *)(*(method_names+19)), name);            HTEXT_EntityMethods[1] = hasEntity;        }        else if (method == METHOD_EXT_2) {            StrAllocCopy ((char *)(*(method_names+20)), name);            HTEXT_EntityMethods[2] = hasEntity;        }        else if (method == METHOD_EXT_3) {            StrAllocCopy ((char *)(*(method_names+21)), name);            HTEXT_EntityMethods[3] = hasEntity;        }        else if (method == METHOD_EXT_4) {            StrAllocCopy ((char *)(*(method_names+22)), name);            HTEXT_EntityMethods[4] = hasEntity;        }        else if (method == METHOD_EXT_5) {            StrAllocCopy ((char *)(*(method_names+23)), name);            HTEXT_EntityMethods[5] = hasEntity;        }        else if (method == METHOD_EXT_6) {            StrAllocCopy ((char *)(*(method_names+24)), name);              HTEXT_EntityMethods[6] = hasEntity;        }        else return NO;        return YES;         }   #endif /* HT_EXT */    return NO;    }/*** Delete the extension method: this funcion unset the extension method*/PUBLIC BOOL HTMethod_deleteExtensionMethod (HTMethod method) {#ifdef HT_EXT    char *ptr = NULL;       if ( (method == METHOD_EXT_0) && (*(method_names+18)) )  {         ptr = (char *) (*(method_names+18));         (*(method_names+18)) = NULL;    }    else if ( (method == METHOD_EXT_1) && (*(method_names+19)) ) {        ptr = (char *) (*(method_names+19));        (*(method_names+19)) = NULL;    }       else if ( (method == METHOD_EXT_2) && (*(method_names+20)) ) {        ptr = (char *) (*(method_names+20));        (*(method_names+20)) = NULL;    }    else if ( (method == METHOD_EXT_3) && (*(method_names+21)) ) {        ptr = (char *) (*(method_names+21));        (*(method_names+21)) = NULL;    }    else if ( (method == METHOD_EXT_4) && (*(method_names+22)) ) {        ptr = (char *) (*(method_names+22));        (*(method_names+22)) = NULL;        }    else if ( (method == METHOD_EXT_5) && (*(method_names+23)) ) {        ptr = (char *) (*(method_names+23));        (*(method_names+23)) = NULL;    }    else if ( (method == METHOD_EXT_6) && (*(method_names+24)) ) {        ptr = (char *) (*(method_names+24));        (*(method_names+24)) = NULL;    }        if (ptr) {        HT_FREE(ptr);        return YES;    }    #endif /* HT_EXT */    return NO;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -