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

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.8     ! frystyk     6: **     @(#) $Id: HTTrans.c,v 2.7 1999/02/22 22:10:12 frystyk Exp $
2.1       frystyk     7: **
                      8: ** HISTORY:
                      9: **     Marts 96 HFN    Written
                     10: */
                     11: 
                     12: /* Library Include files */
2.5       frystyk    13: #include "wwwsys.h"
2.4       frystyk    14: #include "WWWUtil.h"
2.1       frystyk    15: #include "HTParse.h"
                     16: #include "HTReq.h"
                     17: #include "HTIOStream.h"
                     18: #include "HTTrans.h"                                    /* Implemented here */
                     19: 
                     20: PRIVATE HTList * transports = NULL;         /* List of registered transports */
                     21: 
                     22: /* --------------------------------------------------------------------------*/
                     23: 
                     24: /*
                     25: **     Register a Transport module
                     26: */
                     27: PUBLIC BOOL HTTransport_add (const char *              name,
2.4       frystyk    28:                             HTTransportMode            mode,
2.1       frystyk    29:                             HTInput_new *              get_input,
                     30:                             HTOutput_new *             get_output)
                     31: {
2.3       frystyk    32:     if (name && (get_input || get_output)) {
2.1       frystyk    33:        HTTransport * tp;
                     34:        if ((tp = (HTTransport *) HT_CALLOC(1, sizeof(HTTransport))) == NULL)
                     35:            HT_OUTOFMEM("HTTransport_add");
                     36:        StrAllocCopy(tp->name, name);
                     37:        {
                     38:            char *ptr = tp->name;
                     39:            while ((*ptr = TOLOWER(*ptr))) ptr++;
                     40:        }
                     41:        tp->mode = mode;
                     42:        tp->input_new = get_input;
                     43:        tp->output_new = get_output;
                     44:        if (!transports) transports = HTList_new();
2.7       frystyk    45:        HTTRACE(CORE_TRACE, "Transport... Adding `%s'\n" _ name);
2.1       frystyk    46:        return HTList_addObject(transports, (void *) tp);
2.7       frystyk    47:     } else HTTRACE(CORE_TRACE, "Transport... Can't add this...\n");
2.1       frystyk    48:     return NO;
                     49: }
                     50: 
                     51: /*
                     52: **     Deletes a Transport module
                     53: */
                     54: PUBLIC BOOL HTTransport_delete (const char * name)
                     55: {
                     56:     if (transports) {
                     57:        HTList *cur = transports;
                     58:        HTTransport *pres;
                     59:        while ((pres = (HTTransport *) HTList_nextObject(cur))) {
                     60:            if (!strcmp(pres->name, name)) {
2.8     ! frystyk    61:                BOOL status = HTList_removeObject(transports, (void *) pres);
2.1       frystyk    62:                HT_FREE(pres->name);
2.8     ! frystyk    63:                HT_FREE(pres);
        !            64:                return status;
2.1       frystyk    65:            }
                     66:        }
                     67:     }
                     68:     return NO;
                     69: }
                     70: 
                     71: /*
                     72: **     Delete the list of registered transports. This is called from
                     73: **     within HTLibTerminate.
                     74: */
                     75: PUBLIC BOOL HTTransport_deleteAll (void)
                     76: {
                     77:     if (transports) {
                     78:        HTList * cur = transports;
                     79:        HTTransport * pres;
                     80:        while ((pres = (HTTransport *) HTList_nextObject(cur))) {
                     81:            HT_FREE(pres->name);
                     82:            HT_FREE(pres);
                     83:        }
                     84:        HTList_delete(transports);
                     85:        transports = NULL;
                     86:        return YES;
                     87:     }
                     88:     return NO;
                     89: }
                     90: 
                     91: /*
                     92: **     Search registered transports to find a suitable transport object.
                     93: **     Return transport object or NULL
                     94: */
                     95: PUBLIC HTTransport * HTTransport_find (HTRequest * request, const char * name)
                     96: {
2.6       frystyk    97:     if (name) {
2.1       frystyk    98:        HTList * cur = transports;
                     99:        HTTransport * pres;
                    100:        if (cur) {
                    101:            while ((pres = (HTTransport *) HTList_nextObject(cur))) {
                    102:                if (!strcmp(pres->name, name)) return pres;
                    103:            }
                    104:        }
2.6       frystyk   105:        if (request)
                    106:            HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, (char *) name,
                    107:                               (int) strlen(name), "HTTransport_find");
2.1       frystyk   108:     }
                    109:     return NULL;
                    110: }
                    111: 
2.4       frystyk   112: PUBLIC HTTransportMode HTTransport_mode (HTTransport * tp)
2.1       frystyk   113: {
2.4       frystyk   114:     return (tp ? tp->mode : HT_TP_SINGLE);
2.1       frystyk   115: }
2.4       frystyk   116: 
                    117: PUBLIC BOOL HTTransport_setMode (HTTransport * tp, HTTransportMode mode)
                    118: {
                    119:     if (tp) {
                    120:         tp->mode = mode;
                    121:         return YES;
                    122:     }
                    123:     return NO;
                    124: }
                    125: 

Webmaster