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

📄 davsample.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
📖 第 1 页 / 共 2 页
字号:
/*** UNLOCK requests*/PRIVATE BOOL unlock_request (Cmdline * arg ) {            HTDAVHeaders * headers = HTDAVHeaders_new();    HTRequest * request = create_request ();    HTAnchor * dst = HTAnchor_findAddress(arg->request_uri);    HTParentAnchor *base = NULL;    BOOL status = NO;    if (arg->arg1) {        HTPrint ("Adding Lock-Token header %s\n",arg->arg1);        HTDAV_setLockTokenHeader (headers,arg->arg1);    }            if (arg->base_str && *(arg->base_str))             base = (HTParentAnchor *) HTAnchor_findAddress(arg->base_str);                    /* chose func */    switch (arg->func) {        case 1: status = HTUNLOCKAnchor (request,dst,headers);                break;        case 2: status = HTUNLOCKAbsolute (request,arg->request_uri,headers);                break;        case 3: status = HTUNLOCKRelative (request,arg->request_uri,base,headers);                break;                        }    return status;}/*** PROPFIND requests*/PRIVATE BOOL propfind_request (Cmdline * arg) {    BOOL status = NO;    HTDAVHeaders * headers = HTDAVHeaders_new();    HTRequest * request = create_request ();    HTAnchor * dst = HTAnchor_findAddress(arg->request_uri);    HTParentAnchor *base = NULL;    HTParentAnchor *src = NULL;    char * xmlbody = NULL;    /* chose the func */    HTPrint ("should we set the xml body?\n");    if (arg->arg1 && *(arg->arg1)) {        if (!strcasecomp (arg->arg1,"allprop") || !strcasecomp (arg->arg1,"propname"))             xmlbody = create_propbody (arg->arg1);        else            xmlbody = arg->arg1;        HTPrint ("xml body %s\n",xmlbody);            }                if (arg->func==2 && xmlbody && *xmlbody) {        src = HTTmpAnchor(NULL);        HTAnchor_setDocument(src, xmlbody);        HTAnchor_setFormat(src, HTAtom_for ("text/xml"));        HTAnchor_setLength(src, strlen(xmlbody));                    }     if (arg->base_str && *(arg->base_str))         base = (HTParentAnchor *) HTAnchor_findAddress(arg->base_str);    HTPrint ("setting headers\n");    if (arg->D) HTDAV_setDepthHeader (headers,arg->D);    switch (arg->func) {        case 1: status = HTPROPFINDAnchor (request,dst,xmlbody,headers);                break;         case 2: status = HTPROPFINDDocumentAnchor (request,dst,src,headers);                break;         case 3: status = HTPROPFINDAbsolute (request,arg->request_uri,xmlbody,headers);                break;         case 4: status = HTPROPFINDRelative (request,arg->request_uri,base,xmlbody,headers);                break;     }        return status;}/*** PROPPATCH requests*/PRIVATE BOOL proppatch_request (Cmdline * arg) {    BOOL status = NO;    HTDAVHeaders * headers = HTDAVHeaders_new();    HTRequest * request = create_request ();    HTAnchor * dst = HTAnchor_findAddress(arg->request_uri);    HTParentAnchor *base = NULL;    HTParentAnchor *src = NULL;    char * xmlbody = NULL;        if (arg->arg1 && *(arg->arg1))         xmlbody = arg->arg1;            else         return NO;        HTPrint ("xml body **%s**\n",xmlbody);                if (arg->func==2) {        src = HTTmpAnchor(NULL);        HTAnchor_setDocument(src, xmlbody);        HTAnchor_setFormat(src, HTAtom_for ("text/xml"));        HTAnchor_setLength(src, strlen(xmlbody));                    }     if (arg->base_str && *(arg->base_str))         base = (HTParentAnchor *) HTAnchor_findAddress(arg->base_str);    HTPrint ("setting headers\n");    if (arg->I && *(arg->I)) {                   HTPrint ("Adding If header %s\n",arg->I);        HTDAV_setIfHeader (headers,arg->I);    }    HTPrint ("Chosing func\n");    switch (arg->func) {        case 1: status = HTPROPPATCHAnchor (request,dst,xmlbody,headers);                break;         case 2: status = HTPROPPATCHDocumentAnchor (request,dst,src,headers);                break;         case 3: status = HTPROPPATCHAbsolute (request,arg->request_uri,xmlbody,headers);                break;         case 4: status = HTPROPPATCHRelative (request,arg->request_uri,base,xmlbody,headers);                break;     }        return status;}/*** MKCOL requests*/PRIVATE BOOL mkcol_request (Cmdline * arg) {    BOOL status = NO;    HTDAVHeaders * headers = HTDAVHeaders_new();    HTRequest * request = create_request ();    HTAnchor * dst = HTAnchor_findAddress(arg->request_uri);    HTParentAnchor *base = NULL;        if (arg->base_str && *arg->base_str) {        base = (HTParentAnchor *) HTAnchor_findAddress(arg->base_str);    }     if (arg->I && *(arg->I)) {        HTPrint ("If header: %s\n",arg->I);        HTDAV_setIfHeader (headers,arg->I);    }    switch (arg->func) {        case 1: status = HTMKCOLAnchor (request,dst,headers);                break;         case 2: status = HTMKCOLAbsolute (request,arg->request_uri,headers);                break;         case 3: status = HTMKCOLRelative (request,arg->request_uri,base,headers);                break;     }        return status;}/*** COPY requests*/PRIVATE BOOL copy_request (Cmdline * arg ) {             HTDAVHeaders * headers = HTDAVHeaders_new();    HTRequest * request = create_request ();    HTAnchor * src = HTAnchor_findAddress(arg->request_uri);    HTParentAnchor * body = NULL;    HTParentAnchor * base = NULL;    BOOL status = NO;        if (arg->arg1 && *(arg->arg1)) {        HTPrint ("Adding Destination header %s\n",arg->arg1);        HTDAV_setDestinationHeader (headers,arg->arg1);    }            /* chose the func */    if (arg->func==2 && arg->arg2) {        body = HTTmpAnchor(NULL);        HTAnchor_setDocument(body, arg->arg2);        HTAnchor_setFormat(body, HTAtom_for ("text/xml"));        HTAnchor_setLength(body, strlen(arg->arg2));                     }     if (arg->base_str && *(arg->base_str))         base = (HTParentAnchor *) HTAnchor_findAddress(arg->base_str);    if (arg->I) {       HTPrint ("Adding If header %s\n",arg->I);       HTDAV_setIfHeader (headers,arg->I);    }            if (arg->D)HTDAV_setDepthHeader (headers,arg->D);    if (arg->O!=' ')HTDAV_setOverwriteHeader (headers,arg->O);    switch (arg->func) {        case 1: status = HTCOPYAnchor (request,src,arg->arg2,headers);                break;        case 2: status = HTCOPYDocumentAnchor (request,src,body,headers);                break;        case 3: status = HTCOPYAbsolute (request,arg->request_uri,arg->arg2,headers);                break;        case 4: status = HTCOPYRelative (request,arg->request_uri,base,arg->arg2,headers);                break;    }    return status;}/*** MOVE requests*/PRIVATE BOOL move_request ( Cmdline * arg ) {             HTDAVHeaders * headers = HTDAVHeaders_new();    HTRequest * request = create_request ();    HTAnchor * src = HTAnchor_findAddress(arg->request_uri);    HTParentAnchor * body = NULL;    HTParentAnchor * base = NULL;    BOOL status = NO;            if (arg->arg1) {       HTPrint ("Adding Destination header %s\n",arg->arg1);       HTDAV_setDestinationHeader (headers,arg->arg1);    }            if (arg->I) {       HTPrint ("Adding If header %s\n",arg->I);       HTDAV_setIfHeader (headers,arg->I);    }    /* chose the func */    if (arg->func==2 && arg->arg2 ) {        body = HTTmpAnchor(NULL);        HTAnchor_setDocument(body, arg->arg2);        HTAnchor_setFormat(body, HTAtom_for ("text/xml"));        HTAnchor_setLength(body, strlen(arg->arg2));                     }     if (arg->base_str && *(arg->base_str))         base = (HTParentAnchor *) HTAnchor_findAddress(arg->base_str);    if (arg->D) HTDAV_setDepthHeader (headers,arg->D);    if (arg->O == 'T') HTDAV_setOverwriteHeader (headers,YES);    else if (arg->O == 'F') HTDAV_setOverwriteHeader (headers,NO);    switch (arg->func) {        case 1: status = HTMOVEAnchor (request,src,arg->arg2,headers);                break;        case 2: status = HTMOVEDocumentAnchor (request,src,body,headers);                break;        case 3: status = HTMOVEAbsolute (request,arg->request_uri,arg->arg2, headers);                break;        case 4: status = HTMOVERelative (request,arg->request_uri,base,arg->arg2,headers);                break;    }    return status;}/* ---------------------------------------------------------------- * *                    COMMAND LINE HANDLING                         * * ---------------------------------------------------------------- */Cmdline * handle_args (int argc, char **argv) {    int status = 0;    Cmdline *opt = NULL;    Cmdline *arg = NULL;        printf ("Handling Arguments\n");    if (argc > 3) {        if ( (opt = arg = HT_CALLOC (1,sizeof (Cmdline))) ) {            int i = 1;            status = 1;                        /*clean up everything */            opt->func = 0;            opt->method = opt->O = ' ';            opt->D = opt->T = opt->I = NULL;            arg->request_uri = arg->base_str = NULL;            arg->arg1 = arg->arg2 = NULL;                        /* method */            if (argv[i][0]=='-') opt->method = argv[i++][1];            else status = 0;            argc--;                        /* function */            opt->func = atoi (argv[i++]) * (-1);            argc--;            /* options */            while (argc>0 && argv[i][0]=='-') {                if (argv[i][1] == 'D') { opt->D=argv[++i]; argc--; }                else if (argv[i][1] == 'T') { opt->T=argv[++i]; argc--; }                else if (argv[i][1] == 'I') { opt->I=argv[++i]; argc--; }                else if (argv[i][1] == 'O') { opt->O=argv[++i][0]; argc--; }                else status = 0;                i++; argc--;            }                        /* func args _ request_uri */            if (argc>0) { arg->request_uri = argv[i++]; argc--; }            else status = 0;            /* func args _ base? */            if ( argc > 0 &&                  ( ( (opt->method=='l' || opt->method=='f' || opt->method=='p' ||                       opt->method=='c' || opt->method=='m') && opt->func==4 )  ||                   ( (opt->method=='u' || opt->method=='k') && opt->func==3 ) ) )             { arg->base_str = argv[i++];               argc--;             }            /* func arg - first arg */            if (argc>0) { arg->arg1 = argv[i++]; argc--; }                                    /* func arg - second arg */            if (argc>0) { arg->arg2 = argv[i++]; argc--; }                    }    }     return arg;}/* ---------------------------------------------------------------- * *                           MAIN                                   * * ---------------------------------------------------------------- */int main (int argc, char ** argv){    BOOL status = NO;    Cmdline * opt = NULL;    Cmdline * arg = NULL;        /* Create a new premptive client */    Init();        /* Handle command line args */    if (argc >= 3) {       arg = opt = handle_args (argc,argv);       if (opt && arg) {                       HTPrint ("method: %c (func %d)\n",opt->method,opt->func);           HTPrint ("\tDepth: %s \n\tTimeout: %s \n",(opt->D)?opt->D:"UNDEFINED", \                                                 (opt->T)?opt->T:"UNDEFINED");           HTPrint ("\tIf: %s \n\tOverwrite: %c \n",(opt->I)?opt->I:"UNDEFINED",opt->O);           HTPrint ("\tRequest URI: %s%s \n",(arg->base_str)?arg->base_str:"", \                                         arg->request_uri);           HTPrint ("\t1

⌨️ 快捷键说明

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