Annotation of libwww/Library/src/HTTrans.c, revision 2.2

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.
2.2     ! frystyk     6: **     @(#) $Id: HTTrans.c,v 2.1 1996/04/12 17:49:31 frystyk Exp $
2.1       frystyk     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();
2.2     ! frystyk    46:        if (CORE_TRACE) HTTrace("Transport... Adding `%s'\n", name);
2.1       frystyk    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