Reply timeout

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