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