libwww/Library/src/HTTrans.c - view - 2.9

[BACK] Return to HTTrans.c CVS log [TXT] [DIR] Up to [Public] / libwww / Library / src

File: [Public] / libwww / Library / src / HTTrans.c
Revision 2.9: download - view: text, annotated - select for diffs
Mon Aug 1 19:39:35 2005 UTC (20 years, 1 month ago) by vbancrof
Branches: MAIN
CVS tags: repeat-requests, candidate-5-4-1, HEAD
Patch to greatly speed up repeated requests, from Arthur Smith

/*								 HTTrans.c
**	TRANSPORT LAYER MANAGER
**
**	(c) COPYRIGHT MIT 1995.
**	Please first read the full copyright statement in the file COPYRIGH.
**	@(#) $Id: HTTrans.c,v 2.9 2005年08月01日 19:39:35 vbancrof Exp $
**
** HISTORY:
**	Marts 96 HFN	Written
*/
/* Library Include files */
#include "wwwsys.h"
#include "WWWUtil.h"
#include "HTParse.h"
#include "HTReq.h"
#include "HTIOStream.h"
#include "HTTrans.h"					 /* Implemented here */
PRIVATE HTList * transports = NULL; /* List of registered transports */
/* --------------------------------------------------------------------------*/
/*
**	Register a Transport module
*/
PUBLIC BOOL HTTransport_add (const char *		name,
			 HTTransportMode		mode,
			 HTInput_new *		get_input,
			 HTOutput_new *		get_output)
{
 if (name && (get_input || get_output)) {
	HTTransport * tp;
	if ((tp = (HTTransport *) HT_CALLOC(1, sizeof(HTTransport))) == NULL)
	 HT_OUTOFMEM("HTTransport_add");
	StrAllocCopy(tp->name, name);
	{
	 char *ptr = tp->name;
	 while ((*ptr = TOLOWER(*ptr))) ptr++;
	}
	tp->mode = mode;
	tp->input_new = get_input;
	tp->output_new = get_output;
	if (!transports) transports = HTList_new();
	else HTTransport_delete(name); /* Ensure not listed twice */
	HTTRACE(CORE_TRACE, "Transport... Adding `%s'\n" _ name);
	return HTList_addObject(transports, (void *) tp);
 } else HTTRACE(CORE_TRACE, "Transport... Can't add this...\n");
 return NO;
}
/*
**	Deletes a Transport module
*/
PUBLIC BOOL HTTransport_delete (const char * name)
{
 if (transports) {
	HTList *cur = transports;
	HTTransport *pres;
	while ((pres = (HTTransport *) HTList_nextObject(cur))) {
	 if (!strcmp(pres->name, name)) {
		BOOL status = HTList_removeObject(transports, (void *) pres);
		HT_FREE(pres->name);
		HT_FREE(pres);
		return status;
	 }
	}
 }
 return NO;
}
/*
**	Delete the list of registered transports. This is called from
**	within HTLibTerminate.
*/
PUBLIC BOOL HTTransport_deleteAll (void)
{
 if (transports) {
	HTList * cur = transports;
	HTTransport * pres;
	while ((pres = (HTTransport *) HTList_nextObject(cur))) {
	 HT_FREE(pres->name);
	 HT_FREE(pres);
	}
	HTList_delete(transports);
	transports = NULL;
	return YES;
 }
 return NO;
}
/*
**	Search registered transports to find a suitable transport object.
**	Return transport object or NULL
*/
PUBLIC HTTransport * HTTransport_find (HTRequest * request, const char * name)
{
 if (name) {
	HTList * cur = transports;
	HTTransport * pres;
	if (cur) {
	 while ((pres = (HTTransport *) HTList_nextObject(cur))) {
		if (!strcmp(pres->name, name)) return pres;
	 }
	}
	if (request)
	 HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, (char *) name,
			 (int) strlen(name), "HTTransport_find");
 }
 return NULL;
}
PUBLIC HTTransportMode HTTransport_mode (HTTransport * tp)
{
 return (tp ? tp->mode : HT_TP_SINGLE);
}
PUBLIC BOOL HTTransport_setMode (HTTransport * tp, HTTransportMode mode)
{
 if (tp) {
 tp->mode = mode;
 return YES;
 }
 return NO;
}

Webmaster

AltStyle によって変換されたページ (->オリジナル) /