/* Delete a Command Line Object ** ---------------------------- */ PRIVATE BOOL Robot_delete (Robot * me) { if (me) { if (me->urilist) { HTList *cur = me->urilist; char *temp; while ((temp = (char *) HTList_nextObject(cur))) { HT_FREE(temp); } HTList_delete(cur); } if (me->htext) { HText_free(me->htext); } if (me->output && me->output != STDOUT) fclose(me->output); HT_FREE(me->cwd); HT_FREE(me->tv); /* Delete the profile */ #if 0 HTProfile_delete(); #endif HT_FREE(me); return YES; } return NO; }
PRIVATE void Cleanup (ComLine * me, int status) { ComLine_delete(me); HTProfile_delete(); #ifdef VMS exit(status ? status : 1); #else exit(status ? status : 0); #endif }
/* ** We get called here from the event loop when we are done ** loading. Here we terminate the program as we have nothing ** better to do. */ int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* Delete our request again */ HTRequest_delete(request); /* Delete our profile */ HTProfile_delete(); exit(status ? status : 0); }
PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); }
PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); HTPrint("If you didn't see any tags then it is likely that your document wasn't xml\n"); /* Terminate libwww */ HTProfile_delete(); exit(0); }
PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { /* We are done with this request */ HTRequest_delete(request); if (status == HT_ERROR) HTPrint("Can't listen on this port\n"); /* Terminate libwww */ HTProfile_delete(); exit(0); }
int main (int argc, char ** argv) { HTRequest * request; HTProfile_newPreemptiveClient("HTTPHeadApplication", "1.0"); request = HTRequest_new(); #if 0 /* Turn on TRACE so we can see what is going on */ HTSetTraceMessageMask("sop"); #endif /* We don't want any progress notifications */ HTAlert_setInteractive(NO); /* Parse the command line options */ if (argc >= 2) { char * url = argv[1]; /* Set the header field match (if any) */ if (argc >= 3) match = argv[2]; /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Add our own filter to handle termination */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Set the output format to source and put output to stdout */ HTRequest_setOutputStream(request, HTFWriter_new(request, stdout, YES)); /* Start the load */ if (url && *url) { HTHeadAbsolute(url, request); /* wait until the request has finished */ HTEventList_loop (request); } else HTPrint("Bad parameters - please try again\n"); } else { HTPrint("Type the URL to perform a HEAD request on.\n"); HTPrint("\t%s <url> <header-prefix>\n", argv[0]); HTPrint("where <header-prefix> is the prefix of the header fields\n"); HTPrint("you want to see, for example 'content*. If no \'*\' is used'\n"); HTPrint("then an exact match is needed. Default value is all header fields'\n"); } HTRequest_delete(request); /* Delete the request object */ HTProfile_delete(); return 0; }
PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { if (status == HT_LOADED && result && HTChunk_data(result)) { HTPrint("%s", HTChunk_data(result)); HTChunk_delete(result); } /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); exit(0); }
static char* url_to_local_file(const char* url) { HTRequest* request = NULL; #ifdef __CYGWIN__ char* tmpfile = sidl_String_concat3("cyg", tmpnam(NULL), ".dll"); #else char* tmpfile = sidl_String_concat3("lib", tmpnam(NULL), ".so"); #endif HTProfile_newPreemptiveClient("sidl_DLL", "1.0"); HTAlert_setInteractive(FALSE); request = HTRequest_new(); HTLoadToFile(url, request, tmpfile); HTRequest_delete(request); HTProfile_delete(); return tmpfile; }
/* ** Loads a URL to a local file */ int main (int argc, char ** argv) { HTRequest * request; HTProfile_newPreemptiveClient("TestApp", "1.0"); request = HTRequest_new(); if (argc == 3) { char * url = argv[1]; char * filename = argv[2]; if (url && *url && filename && *filename) HTLoadToFile(url, request, filename); else printf("Bad parameters - please try again\n"); } else { printf("Type the URL to fetch and the name of the local file to put it in\n"); printf("\t%s <url> <filename>\n", argv[0]); } HTRequest_delete(request); /* Delete the request object */ HTProfile_delete(); return 0; }
/* ** request_terminater : global filter to delete the requests ** Funtion's type : HTNetAfter */ PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { my_headers(request); if (response) { HTPrint ("\tStatus:%d\n\tContent-length:%d\n\tIs Cachable:%c\n\tis Cached:%c\n\tReason: %s\n",\ status, HTResponse_length(response),\ (HTResponse_isCachable(response))?'Y':'N',\ (HTResponse_isCached(response,YES))?'Y':'N', \ (HTResponse_reason(response))?HTResponse_reason(response):"NULL"); HTPrint ("\tFormat : %s \n",(char *)HTAtom_name(HTResponse_format(response))); } else HTPrint ("\tResponse NULL\n"); /* Terminate libwww */ HTProfile_delete(); exit(0); }
int main (int argc, char ** argv) { int status = 0; int arg = 0; char * outputfile = NULL; char * getme = NULL; HTRequest * request = NULL; /* Initiate W3C Reference Library with a client profile */ HTProfile_newNoCacheClient(APP_NAME, APP_VERSION); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own filter to terminate the application */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST); /* Setup cookies */ HTCookie_init(); HTCookie_setCallbacks(setCookie, NULL, findCookie, NULL); /* Set the timeout for long we are going to wait for a response */ HTHost_setEventTimeout(10000); /* Scan command line for parameters */ for (arg=1; arg<argc; arg++) { if (!strcmp(argv[arg], "-o")) { outputfile = (arg+1 < argc && *argv[arg+1] != '-') ? argv[++arg] : DEFAULT_OUTPUT_FILE; } else { getme = argv[arg]; } } /* Make sure we have an output */ if (!outputfile) outputfile = DEFAULT_OUTPUT_FILE; if (getme && *getme) { request = HTRequest_new(); /* Start the load */ status = HTLoadToFile(getme, request, outputfile); /* Go into the event loop... */ HTEventList_loop(request); } else { HTPrint("Type the URI of document you want to load and the name of the local file.\n"); HTPrint("\t%s <address> -o <localfile>\n", argv[0]); HTPrint("For example, %s http://www.w3.org -o w3chome.html\n", argv[0]); /* Delete our profile if no load */ HTProfile_delete(); } return 0; }
/* =============== inspired from http://www.w3.org/Library/Examples/LoadToFile.c setup the download, return once we have a connection =============== */ int DL_BeginDownload( const char *localName, const char *remoteName, int debug ) { char *access = NULL; char *url = NULL; char *login = NULL; char *path = NULL; char *ptr = NULL; if ( dl_running ) { Com_Printf(_( "ERROR: DL_BeginDownload called with a download request already active\n" )); return 0; } terminate_status = HT_UNDEF; #ifdef HTDEBUG if ( debug ) { WWWTRACE = SHOW_ALL_TRACE; } #endif if ( !localName || !remoteName ) { Com_DPrintf( "Empty download URL or empty local file name\n" ); return 0; } DL_InitDownload(); /* need access for ftp behaviour and HTTP Basic Auth */ access = HTParse( remoteName, "", PARSE_ACCESS ); /* Set the timeout for how long we are going to wait for a response This needs to be set and reset to 0 after dl each time idcvs/2003-January/000449.html http://lists.w3.org/Archives/Public/www-lib/2003AprJun/0033.html In case of ftp download, we leave no timeout during connect phase cause of libwww bugs show_bug.cgi?id=605 */ if ( !Q_stricmp( access, "ftp" ) ) { dl_is_ftp = 1; HTHost_setEventTimeout( -1 ); } else { dl_is_ftp = 0; HTHost_setEventTimeout( 30000 ); } dl_request = HTRequest_new(); /* HTTP Basic Auth */ if ( !Q_stricmp( access, "http" ) ) { HTBasic *basic; login = HTParse( remoteName, "", PARSE_HOST ); path = HTParse( remoteName, "", PARSE_PATH + PARSE_PUNCTUATION ); ptr = strchr( login, '@' ); if ( ptr ) { /* Uid and/or passwd specified */ char *passwd; *ptr = '\0'; passwd = strchr( login, ':' ); if ( passwd ) { /* Passwd specified */ *passwd++ = '\0'; HTUnEscape( passwd ); } HTUnEscape( login ); /* proactively set the auth */ basic = HTBasic_new(); StrAllocCopy( basic->uid, login ); StrAllocCopy( basic->pw, passwd ); basic_credentials( dl_request, basic ); HTBasic_delete( basic ); /* correct the HTTP */ url = HT_MALLOC( 7 + strlen( ptr + 1 ) + strlen( path ) + 1 ); sprintf( url, "http://%s%s", ptr + 1, path ); Com_DPrintf( "HTTP Basic Auth – %s %s %s\n", login, passwd, url ); HT_FREE( login ); HT_FREE( path ); } else { StrAllocCopy( url, remoteName ); } } else { StrAllocCopy( url, remoteName ); } HT_FREE( access ); FS_CreatePath( localName ); /* Start the load */ if ( HTLoadToFile( url, dl_request, localName ) != YES ) { Com_DPrintf( "HTLoadToFile failed\n" ); HT_FREE( url ); HTProfile_delete(); return 0; } HT_FREE( url ); /* remove possible login/pass part for the ui */ access = HTParse( remoteName, "", PARSE_ACCESS ); login = HTParse( remoteName, "", PARSE_HOST ); path = HTParse( remoteName, "", PARSE_PATH + PARSE_PUNCTUATION ); ptr = strchr( login, '@' ); if ( ptr ) { /* Uid and/or passwd specified */ Cvar_Set( "cl_downloadName", va( "%s://*:*%s%s", access, ptr, path ) ); } else { Cvar_Set( "cl_downloadName", remoteName ); } HT_FREE( path ); HT_FREE( login ); HT_FREE( access ); if ( dl_is_ftp ) { HTHost_setEventTimeout( 30000 ); } /* Go into the event loop... */ HTEventList_init( dl_request ); dl_running = 1; return 1; }