version 1.26, 1996/07/08 19:11:31
|
version 1.27, 1996/07/16 02:27:34
|
Line 60 typedef struct _Robot {
|
Line 60 typedef struct _Robot {
|
HTList * htext; /* List of our HText Objects */ |
HTList * htext; /* List of our HText Objects */ |
struct timeval * tv; /* Timeout on socket */ |
struct timeval * tv; /* Timeout on socket */ |
char * cwd; /* Current dir URL */ |
char * cwd; /* Current dir URL */ |
HTList * converters; |
|
HTList * encoders; |
|
char * rules; |
char * rules; |
char * logfile; |
char * logfile; |
char * outputfile; |
char * outputfile; |
Line 195 PRIVATE BOOL Robot_delete (Robot * me)
|
Line 193 PRIVATE BOOL Robot_delete (Robot * me)
|
HText_free(pres); |
HText_free(pres); |
HTList_delete(me->htext); |
HTList_delete(me->htext); |
} |
} |
HTConversion_deleteAll(me->converters); |
|
HTCoding_deleteAll(me->encoders); |
|
if (me->logfile) HTLog_close(); |
if (me->logfile) HTLog_close(); |
if (me->output && me->output != STDOUT) fclose(me->output); |
if (me->output && me->output != STDOUT) fclose(me->output); |
if (me->flags & MR_TIME) { |
if (me->flags & MR_TIME) { |
Line 301 PRIVATE int terminate_handler (HTRequest
|
Line 297 PRIVATE int terminate_handler (HTRequest
|
*/ |
*/ |
PRIVATE int timeout_handler (HTRequest * request) |
PRIVATE int timeout_handler (HTRequest * request) |
{ |
{ |
|
#if 0 |
Robot * mr = (Robot *) HTRequest_context(request); |
Robot * mr = (Robot *) HTRequest_context(request); |
|
#endif |
if (SHOW_MSG) HTTrace("Robot....... We don't know how to handle timeout...\n"); |
if (SHOW_MSG) HTTrace("Robot....... We don't know how to handle timeout...\n"); |
#if 0 |
#if 0 |
HTRequest_kill(request); |
HTRequest_kill(request); |
Line 310 PRIVATE int timeout_handler (HTRequest *
|
Line 308 PRIVATE int timeout_handler (HTRequest *
|
return HT_OK; |
return HT_OK; |
} |
} |
|
|
/* proxy_handler |
|
** --------------- |
|
** This function is registered to be called before a request is issued |
|
** We look for redirection for proxies and gateways |
|
** returns HT_LOADED We already have this |
|
** HT_ERROR We can't load this |
|
** HT_OK Success |
|
*/ |
|
PRIVATE int proxy_handler (HTRequest * request, void * param, int status) |
|
{ |
|
HTParentAnchor *anchor = HTRequest_anchor(request); |
|
char * addr = HTAnchor_address((HTAnchor *) anchor); |
|
char * newaddr = NULL; |
|
if ((newaddr = HTProxy_find(addr))) { |
|
StrAllocCat(newaddr, addr); |
|
HTRequest_setFullURI(request, YES); |
|
HTAnchor_setPhysical(anchor, newaddr); |
|
} else if ((newaddr = HTGateway_find(addr))) { |
|
char * path = HTParse(addr,"",PARSE_HOST+PARSE_PATH+PARSE_PUNCTUATION); |
|
/* Chop leading / off to make host into part of path */ |
|
char * gatewayed = HTParse(path+1, newaddr, PARSE_ALL); |
|
HTRequest_setFullURI(request, NO); |
|
HTAnchor_setPhysical(anchor, gatewayed); |
|
HT_FREE(path); |
|
HT_FREE(gatewayed); |
|
} else |
|
HTRequest_setFullURI(request, NO); |
|
HT_FREE(newaddr); |
|
HT_FREE(addr); |
|
return HT_OK; |
|
} |
|
|
|
/* ------------------------------------------------------------------------- */ |
/* ------------------------------------------------------------------------- */ |
/* HTEXT INTERFACE */ |
/* HTEXT INTERFACE */ |
/* ------------------------------------------------------------------------- */ |
/* ------------------------------------------------------------------------- */ |
Line 472 int main (int argc, char ** argv)
|
Line 438 int main (int argc, char ** argv)
|
argc=ccommand(&argv); |
argc=ccommand(&argv); |
#endif |
#endif |
|
|
/* Initiate W3C Reference Library */ |
/* Initiate W3C Reference Library with a robot profile */ |
HTLibInit(APP_NAME, APP_VERSION); |
HTProfile_newRobot(APP_NAME, APP_VERSION); |
HTMIMEInit(); |
|
|
/* Add the default HTML parser to the set of converters */ |
|
{ |
|
HTList * converters = HTFormat_conversion(); |
|
HTMLInit(converters); |
|
} |
|
|
/* Build a new robot object */ |
/* Build a new robot object */ |
mr = Robot_new(); |
mr = Robot_new(); |
|
|
/* Set up our event manager */ |
|
HTEventrgInit(); |
|
|
|
/* Register a transport */ |
|
HTTransportInit(); |
|
|
|
/* Initialize the protocol modules */ |
|
HTProtocolInit(); |
|
|
|
/* Initialize set of converters */ |
|
mr->converters = HTList_new(); |
|
HTConverterInit(mr->converters); |
|
HTMLInit(mr->converters); |
|
HTFormat_setConversion(mr->converters); |
|
|
|
/* Set up encoders and decoders */ |
|
mr->encoders = HTList_new(); |
|
HTEncoderInit(mr->encoders); |
|
HTFormat_setTransferCoding(mr->encoders); |
|
|
|
/* Initialize bindings between file suffixes and media types */ |
|
HTFileInit(); |
|
|
|
/* Get any proxy or gateway environment variables */ |
|
HTProxy_getEnvVar(); |
|
|
|
/* Scan command Line for parameters */ |
/* Scan command Line for parameters */ |
for (arg=1; arg<argc; arg++) { |
for (arg=1; arg<argc; arg++) { |
if (*argv[arg] == '-') { |
if (*argv[arg] == '-') { |
Line 608 int main (int argc, char ** argv)
|
Line 553 int main (int argc, char ** argv)
|
|
|
/* Rule file specified? */ |
/* Rule file specified? */ |
if (mr->rules) { |
if (mr->rules) { |
HTList * list = HTList_new(); |
|
HTRequest * rr = HTRequest_new(); |
|
char * rules = HTParse(mr->rules, mr->cwd, PARSE_ALL); |
char * rules = HTParse(mr->rules, mr->cwd, PARSE_ALL); |
HTParentAnchor * ra = (HTParentAnchor *) HTAnchor_findAddress(rules); |
if (!HTLoadRules(rules)) |
HTRequest_setPreemptive(rr, YES); |
|
HTAlert_setInteractive(NO); |
|
HTConversion_add(list, "application/x-www-rules", "*/*", HTRules, |
|
1.0, 0.0, 0.0); |
|
HTRequest_setConversion(rr, list, YES); |
|
HTAlert_add(HTConfirm, HT_A_CONFIRM); |
|
if (HTLoadAnchor((HTAnchor *) ra, rr) != YES) |
|
if (SHOW_MSG) HTTrace("Can't access rules\n"); |
if (SHOW_MSG) HTTrace("Can't access rules\n"); |
HTConversion_deleteAll(list); |
|
HTRequest_delete(rr); |
|
HTAlert_delete(HTConfirm); |
|
HT_FREE(rules); |
HT_FREE(rules); |
} |
} |
|
|
Line 637 int main (int argc, char ** argv)
|
Line 570 int main (int argc, char ** argv)
|
/* Log file specifed? */ |
/* Log file specifed? */ |
if (mr->logfile) HTLog_open(mr->logfile, YES, YES); |
if (mr->logfile) HTLog_open(mr->logfile, YES, YES); |
|
|
/* Register our User Prompts etc in the Alert Manager */ |
/* Register our own someterminater filter */ |
if (HTAlert_interactive()) { |
|
HTAlert_add(HTError_print, HT_A_MESSAGE); |
|
HTAlert_add(HTConfirm, HT_A_CONFIRM); |
|
HTAlert_add(HTPrompt, HT_A_PROMPT); |
|
HTAlert_add(HTPromptPassword, HT_A_SECRET); |
|
HTAlert_add(HTPromptUsernameAndPassword, HT_A_USER_PW); |
|
} |
|
|
|
/* |
|
** Register some standard BEFORE and AFTER filters |
|
*/ |
|
HTNetCall_addBefore(HTProxyFilter, NULL, 0); |
|
HTNetCall_addBefore(HTRuleFilter, NULL, 0); |
|
HTNetCall_addAfter(HTLogFilter, NULL, HT_ALL); |
|
HTNetCall_addAfter(HTInfoFilter, NULL, HT_ALL); |
|
HTNetCall_addAfter(terminate_handler, NULL, HT_ALL); |
HTNetCall_addAfter(terminate_handler, NULL, HT_ALL); |
|
|
/* Set timeout on sockets */ |
/* Set timeout on sockets */ |
Line 660 int main (int argc, char ** argv)
|
Line 578 int main (int argc, char ** argv)
|
|
|
/* Start the request */ |
/* Start the request */ |
if (keywords) /* Search */ |
if (keywords) /* Search */ |
status = HTSearch(HTChunk_data(keywords), mr->anchor, mr->request); |
status = HTSearchAnchor(keywords, mr->anchor, mr->request); |
else |
else |
status = HTLoadAnchor((HTAnchor *) mr->anchor, mr->request); |
status = HTLoadAnchor((HTAnchor *) mr->anchor, mr->request); |
|
|