- From: Mikhail Grouchinski <mgrouch@usa.net>
- Date: 17 Dec 1998 15:26:16 -0000
- To: www-lib@w3.org
Hi all,
I receive HTTP response with 30 sec time-out.
I print out response body within a callback
registered with HTNet_addAfter. Maybe this is
not the right callback for my case?
Here is the source code.
Thank you for any help.
#include <stdio.h>
#include "WWWLib.h"
#include "WWWTrans.h"
#include "WWWInit.h"
#include "WWWApp.h"
#ifdef LIBWWW_SHARED
#include "HTextImp.h"
#endif
#define APP_NAME "GW-test"
#define APP_VER "1.0"
typedef struct _Context {
HTRequest * request;
HTAnchor * anchor;
HTChunk * chunk;
} Context;
PRIVATE int FD = STDIN_FILENO;
PRIVATE HTEvent * FdEvent = NULL;
/* Create a Context Object
** -----------------------
*/
PRIVATE Context * Context_new (HTRequest *request, HTAnchor *anchor, HTChunk *chunk)
{
Context * me;
if ((me = (Context *) HT_CALLOC(1, sizeof (Context))) == NULL)
HT_OUTOFMEM("Context_new");
me->request = request;
me->anchor = anchor;
me->chunk = chunk;
HTRequest_setContext(request, (void *) me);
return me;
}
/* Delete a Context Object
** -----------------------
*/
PRIVATE BOOL Context_delete (Context * old)
{
HT_FREE(old);
return YES;
}
/* Initialize LibWWW
** -----------------------
*/
PRIVATE void init_libwww(const char * AppName, const char * AppVersion)
{
HTLib_setAppName(AppName);
HTLib_setAppVersion(AppVersion);
HTTransport_add("tcp", HT_TP_SINGLE, HTReader_new, HTWriter_new);
HTTransport_add("buffered_tcp", HT_TP_SINGLE, HTReader_new, HTBufferWriter_new);
HTProtocol_add("http", "buffered_tcp", HTTP_PORT, NO, HTLoadHTTP, NULL);
HTNetInit();
HTEventInit();
HTNet_setMaxSocket(6); /* Max sockets open simultaneously */
HTProxy_getEnvVar(); /* Get proxy environment variables */
HTMIMEInit(); /* Register MIME header parsers */
HTAlert_setInteractive(NO);
}
/* Process messages
** -----------------------
*/
PRIVATE int process(int fd, void* param, HTEventType type)
{
char c;
HTRequest * request = NULL;
HTAnchor * anchor = NULL;
HTChunk * chunk = NULL;
Context * context = NULL;
c = getchar();
if (c == '\n') return HT_OK;
printf("%c process\n", c);
if (c == '1') {
request = HTRequest_new();
anchor = HTAnchor_findAddress("http://infoworxnt");
HTRequest_setOutputFormat(request, WWW_SOURCE);
chunk = HTLoadAnchorToChunk(anchor, request);
if (chunk) {
context = Context_new(request, anchor, chunk);
}
}
return HT_OK;
}
/* Terminate request callback
** -----------------------
*/
PRIVATE int terminate_handler(HTRequest * request,
HTResponse * response, void * param, int status)
{
Context* context = NULL;
printf("terminate_handler\n");
context = HTRequest_context(request);
if (context) {
if (context->chunk && HTChunk_data(context->chunk)) {
fprintf(stdout, "%s", HTChunk_data(context->chunk));
HTChunk_delete(context->chunk);
}
/* Request completed */
Context_delete(context);
HTRequest_delete(request);
}
}
int main (int argc, char ** argv)
{
int to = -1;
int status = 1;
char * context = NULL;
WWWTRACE = SHOW_ALL_TRACE;
init_libwww(APP_NAME, APP_VER);
/*
HTProfile_newNoCacheClient(APP_NAME, APP_VER);
*/
HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST);
FdEvent = HTEvent_new(process, context, HT_PRIORITY_MAX, to);
HTEventList_register(FD, HTEvent_READ, FdEvent);
if (status) HTEventList_loop(NULL);
return 0;
}
Received on Thursday, 17 December 1998 10:26:22 UTC