Annotation of libwww/Library/src/HTTrans.c, revision 2.1
2.1 ! frystyk 1: /* HTTrans.c
! 2: ** TRANSPORT LAYER MANAGER
! 3: **
! 4: ** (c) COPYRIGHT MIT 1995.
! 5: ** Please first read the full copyright statement in the file COPYRIGH.
! 6: ** @(#) $Id: Date Author State $
! 7: **
! 8: ** HISTORY:
! 9: ** Marts 96 HFN Written
! 10: */
! 11:
! 12: /* Library Include files */
! 13: #include "sysdep.h"
! 14: #include "HTUtils.h"
! 15: #include "HTString.h"
! 16: #include "HTParse.h"
! 17: #include "HTReq.h"
! 18: #include "HTIOStream.h"
! 19: #include "HTTrans.h" /* Implemented here */
! 20:
! 21: PRIVATE HTList * transports = NULL; /* List of registered transports */
! 22:
! 23: /* --------------------------------------------------------------------------*/
! 24:
! 25: /*
! 26: ** Register a Transport module
! 27: */
! 28: PUBLIC BOOL HTTransport_add (const char * name,
! 29: HTChannelMode mode,
! 30: HTInput_new * get_input,
! 31: HTOutput_new * get_output)
! 32: {
! 33: if (name && get_input && get_output) {
! 34: HTTransport * tp;
! 35: if ((tp = (HTTransport *) HT_CALLOC(1, sizeof(HTTransport))) == NULL)
! 36: HT_OUTOFMEM("HTTransport_add");
! 37: StrAllocCopy(tp->name, name);
! 38: {
! 39: char *ptr = tp->name;
! 40: while ((*ptr = TOLOWER(*ptr))) ptr++;
! 41: }
! 42: tp->mode = mode;
! 43: tp->input_new = get_input;
! 44: tp->output_new = get_output;
! 45: if (!transports) transports = HTList_new();
! 46: if (PROT_TRACE) HTTrace("Transport... Adding `%s'\n", name);
! 47: return HTList_addObject(transports, (void *) tp);
! 48: }
! 49: return NO;
! 50: }
! 51:
! 52: /*
! 53: ** Deletes a Transport module
! 54: */
! 55: PUBLIC BOOL HTTransport_delete (const char * name)
! 56: {
! 57: if (transports) {
! 58: HTList *cur = transports;
! 59: HTTransport *pres;
! 60: while ((pres = (HTTransport *) HTList_nextObject(cur))) {
! 61: if (!strcmp(pres->name, name)) {
! 62: HT_FREE(pres->name);
! 63: return HTList_removeObject(transports, (void *) pres);
! 64: }
! 65: }
! 66: }
! 67: return NO;
! 68: }
! 69:
! 70: /*
! 71: ** Delete the list of registered transports. This is called from
! 72: ** within HTLibTerminate.
! 73: */
! 74: PUBLIC BOOL HTTransport_deleteAll (void)
! 75: {
! 76: if (transports) {
! 77: HTList * cur = transports;
! 78: HTTransport * pres;
! 79: while ((pres = (HTTransport *) HTList_nextObject(cur))) {
! 80: HT_FREE(pres->name);
! 81: HT_FREE(pres);
! 82: }
! 83: HTList_delete(transports);
! 84: transports = NULL;
! 85: return YES;
! 86: }
! 87: return NO;
! 88: }
! 89:
! 90: /*
! 91: ** Search registered transports to find a suitable transport object.
! 92: ** Return transport object or NULL
! 93: */
! 94: PUBLIC HTTransport * HTTransport_find (HTRequest * request, const char * name)
! 95: {
! 96: if (request && name) {
! 97: HTList * cur = transports;
! 98: HTTransport * pres;
! 99: if (cur) {
! 100: while ((pres = (HTTransport *) HTList_nextObject(cur))) {
! 101: if (!strcmp(pres->name, name)) return pres;
! 102: }
! 103: }
! 104: HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, (char *) name,
! 105: (int) strlen(name), "HTTransport_find");
! 106: }
! 107: return NULL;
! 108: }
! 109:
! 110: PUBLIC HTChannelMode HTTransport_mode (HTTransport * tp)
! 111: {
! 112: return (tp ? tp->mode : HT_CH_SINGLE);
! 113: }
Webmaster