/*
** @(#) $Id: chunkbody.c,v 1.8 2000/12/19 14:50:33 kahan Exp $
**
** Other libwww samples can be found at "http://www.w3.org/Library/Examples"
**
** Copyright (cİ 1995-1998 World Wide Web Consortium, (Massachusetts
** Institute of Technology, Institut National de Recherche en
** Informatique et en Automatique, Keio University). All Rights
** Reserved. This program is distributed under the W3C's Software
** Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more
** details.
**
** Issues a range request to an HTTP server and saves the result in a chunk
*/
#include "WWWLib.h"
#include "WWWHTTP.h"
#include "WWWInit.h"
PRIVATE int printer (const char * fmt, va_list pArgs)
{
return (vfprintf(stdout, fmt, pArgs));
}
PRIVATE int tracer (const char * fmt, va_list pArgs)
{
return (vfprintf(stderr, fmt, pArgs));
}
PRIVATE int terminate_handler (HTRequest * request, HTResponse * response,
void * param, int status)
{
/* Check for status */
/* HTPrint("Load resulted in status %d\n", status); */
/* we're not handling other requests */
HTEventList_stopLoop ();
/* stop here */
return HT_ERROR;
}
int main (int argc, char ** argv)
{
HTRequest * request = HTRequest_new();
HTList * converters = HTList_new(); /* List of converters */
HTList * encodings = HTList_new(); /* List of encoders */
HTChunk * chunk = NULL;
char * url = argc==2 ? argv[1] : NULL;
/* Initialize libwww core */
HTLibInit("TestApp", "1.0");
/* Gotta set up our own traces */
HTPrint_setCallback(printer);
HTTrace_setCallback(tracer);
/* Turn on TRACE so we can see what is going on */
#if 0
HTSetTraceMessageMask("sop");
#endif
/* On windows we must always set up the eventloop */
#ifdef WWW_WIN_ASYNC
HTEventInit();
#endif
/* Register the default set of transport protocols */
HTTransportInit();
/* Register the default set of protocol modules */
HTProtocolInit();
/* Register the default set of BEFORE and AFTER callback functions */
HTNetInit();
/* Register the default set of converters */
HTConverterInit(converters);
HTFormat_setConversion(converters);
/* Register the default set of transfer encoders and decoders */
HTTransferEncoderInit(encodings);
HTFormat_setTransferCoding(encodings);
/* Register the default set of MIME header parsers */
HTMIMEInit();
/* Add our own filter to handle termination */
HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST);
/* Set up the request and pass it to the Library */
HTRequest_setOutputFormat(request, WWW_SOURCE);
HTRequest_setPreemptive(request, YES);
if (url) {
char * cwd = HTGetCurrentDirectoryURL();
char * absolute_url = HTParse(url, cwd, PARSE_ALL);
HTAnchor * anchor = HTAnchor_findAddress(absolute_url);
chunk = HTLoadAnchorToChunk(anchor, request);
HT_FREE(absolute_url);
HT_FREE(cwd);
/* If chunk != NULL then we have the data */
if (chunk) {
char * string;
/* wait until the request is over */
HTEventList_loop (request);
string = HTChunk_toCString(chunk);
HTPrint("%s", string ? string : "no text");
HT_FREE(string);
}
} else {
HTPrint("Type the URL you want to accces on the command line\n");
}
/* Clean up the request */
HTRequest_delete(request);
HTFormat_deleteAll();
/* On windows, shut down eventloop as well */
#ifdef WWW_WIN_ASYNC
HTEventTerminate();
#endif
/* Terminate the Library */
HTLibTerminate();
return 0;
}
Webmaster