📄 davsample.c
字号:
/*** 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 + -