⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htprot.c

📁 firtext搜索引擎源码
💻 C
字号:
/*								     HTProt.c**	ACCESS SCHEME MANAGER****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTProt.c,v 2.21 1999/04/04 00:09:14 frystyk Exp $****** HISTORY:**	6 July 95  HFN	Spawned off from HTAccess*//* Library Include files */#include "wwwsys.h"#include "HTUtils.h"#include "HTString.h"#include "HTParse.h"#include "HTString.h"#include "HTTrans.h"#include "HTProt.h"					 /* Implemented here *//* Variables and typedefs local to this module */struct _HTProtocol {    char *		name;	      /* Name of this protocol access scheme */    char *		transport;		    /* Name of the transport */    HTProtocolId	id;		   /* Default port for this protocol */    BOOL		preemptive;    HTProtCallback *	client;    HTProtCallback *	server;};PRIVATE HTList * protocols = NULL;           /* List of registered protocols *//* --------------------------------------------------------------------------*//*		      Management of the HTProtocol structure		     *//* --------------------------------------------------------------------------*//***	Register a Protocol module as an active access method*/PUBLIC BOOL HTProtocol_add (const char *       	name,			    const char *	transport,			    HTProtocolId	protocolId,			    BOOL		preemptive,			    HTProtCallback *	client,			    HTProtCallback *	server){    if (name && (client || server)) {	HTProtocol *newProt;	if ((newProt=(HTProtocol *) HT_CALLOC(1, sizeof(HTProtocol))) == NULL)	    HT_OUTOFMEM("HTProtocol_add");	StrAllocCopy(newProt->name, name);	{	    char *ptr = newProt->name;	    while ((*ptr = TOLOWER(*ptr))) ptr++;	}	StrAllocCopy(newProt->transport, transport);	{	    char *ptr = newProt->transport;	    while ((*ptr = TOLOWER(*ptr))) ptr++;	}	newProt->id = protocolId;	newProt->preemptive = preemptive;	newProt->client = client;	newProt->server = server;	if (!protocols) protocols = HTList_new();	HTTRACE(CORE_TRACE, "Protocol.... Adding `%s'\n" _ name);	return HTList_addObject(protocols, (void *) newProt);    }    return NO;}/***	Deletes a Protocol module as an active access method*/PUBLIC BOOL HTProtocol_delete (const char * name){    if (protocols) {	HTList *cur = protocols;	HTProtocol *pres;	while ((pres = (HTProtocol *) HTList_nextObject(cur))) {	    if (!strcmp(pres->name, name)) {		BOOL status = HTList_removeObject(protocols, (void *) pres);		HT_FREE(pres->name);		HT_FREE(pres->transport);		HT_FREE(pres);		return status;	    }	}    }    return NO;}/***	Returns the client callback function*/PUBLIC HTProtCallback * HTProtocol_client (HTProtocol * protocol){    return protocol ? protocol->client : NULL;}/***	Returns the server callback function*/PUBLIC HTProtCallback * HTProtocol_server (HTProtocol * protocol){    return protocol ? protocol->server : NULL;}/***	Returns the default port*/PUBLIC HTProtocolId HTProtocol_id (HTProtocol * protocol){    return protocol ? protocol->id : 0;}/***	Returns YES if preemptive else NO*/PUBLIC BOOL HTProtocol_preemptive (HTProtocol * protocol){    return protocol ? protocol->preemptive : NO;}/***	Delete the list of registered access methods. This is called from**	within HTLibTerminate. Thanks to Eric Sink, eric@spyglass.com*/PUBLIC BOOL HTProtocol_deleteAll (void){    if (protocols) {	HTList *cur = protocols;	HTProtocol *pres;	while ((pres = (HTProtocol *) HTList_nextObject(cur))) {	    HT_FREE(pres->name);	    HT_FREE(pres->transport);	    HT_FREE(pres);	}	HTList_delete(protocols);	protocols = NULL;	return YES;    }    return NO;}/***	Search registered protocols to find suitable protocol object.**	Return protocol object or NULL*/PUBLIC HTProtocol * HTProtocol_find (HTRequest * request, const char * access){    if (access) {	HTList * cur = protocols;	HTProtocol * pres;	if (cur) {	    while ((pres = (HTProtocol *) HTList_nextObject(cur))) {		if (!strcmp(pres->name, access)) return pres;	    }	}	if (request)	    HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, (char*) access,			       (int) strlen(access), "HTProtocol_find");    }    return NULL;}/***  Get the transport name of this protocol*/PUBLIC BOOL HTProtocol_setTransport (HTProtocol * protocol,				     const char * transport){    if (protocol && transport) {	StrAllocCopy(protocol->transport, transport);	{	    char *ptr = protocol->transport;	    while ((*ptr = TOLOWER(*ptr))) ptr++;	}	return YES;    }    return NO;}PUBLIC const char * HTProtocol_transport (HTProtocol * protocol){    return (protocol ? protocol->transport : NULL);}PUBLIC const char * HTProtocol_name (HTProtocol * protocol){    return (protocol ? protocol->name : NULL);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -