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

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.9     ! vbancrof    6: **     @(#) $Id: HTTrans.c,v 2.8 1999/04/04 00:09:14 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.9     ! vbancrof   45:        else HTTransport_delete(name); /* Ensure not listed twice */
2.7       frystyk    46:        HTTRACE(CORE_TRACE, "Transport... Adding `%s'\n" _ name);
2.1       frystyk    47:        return HTList_addObject(transports, (void *) tp);
2.7       frystyk    48:     } else HTTRACE(CORE_TRACE, "Transport... Can't add this...\n");
2.1       frystyk    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)) {
2.8       frystyk    62:                BOOL status = HTList_removeObject(transports, (void *) pres);
2.1       frystyk    63:                HT_FREE(pres->name);
2.8       frystyk    64:                HT_FREE(pres);
                     65:                return status;
2.1       frystyk    66:            }
                     67:        }
                     68:     }
                     69:     return NO;
                     70: }
                     71: 
                     72: /*
                     73: **     Delete the list of registered transports. This is called from
                     74: **     within HTLibTerminate.
                     75: */
                     76: PUBLIC BOOL HTTransport_deleteAll (void)
                     77: {
                     78:     if (transports) {
                     79:        HTList * cur = transports;
                     80:        HTTransport * pres;
                     81:        while ((pres = (HTTransport *) HTList_nextObject(cur))) {
                     82:            HT_FREE(pres->name);
                     83:            HT_FREE(pres);
                     84:        }
                     85:        HTList_delete(transports);
                     86:        transports = NULL;
                     87:        return YES;
                     88:     }
                     89:     return NO;
                     90: }
                     91: 
                     92: /*
                     93: **     Search registered transports to find a suitable transport object.
                     94: **     Return transport object or NULL
                     95: */
                     96: PUBLIC HTTransport * HTTransport_find (HTRequest * request, const char * name)
                     97: {
2.6       frystyk    98:     if (name) {
2.1       frystyk    99:        HTList * cur = transports;
                    100:        HTTransport * pres;
                    101:        if (cur) {
                    102:            while ((pres = (HTTransport *) HTList_nextObject(cur))) {
                    103:                if (!strcmp(pres->name, name)) return pres;
                    104:            }
                    105:        }
2.6       frystyk   106:        if (request)
                    107:            HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS, (char *) name,
                    108:                               (int) strlen(name), "HTTransport_find");
2.1       frystyk   109:     }
                    110:     return NULL;
                    111: }
                    112: 
2.4       frystyk   113: PUBLIC HTTransportMode HTTransport_mode (HTTransport * tp)
2.1       frystyk   114: {
2.4       frystyk   115:     return (tp ? tp->mode : HT_TP_SINGLE);
2.1       frystyk   116: }
2.4       frystyk   117: 
                    118: PUBLIC BOOL HTTransport_setMode (HTTransport * tp, HTTransportMode mode)
                    119: {
                    120:     if (tp) {
                    121:         tp->mode = mode;
                    122:         return YES;
                    123:     }
                    124:     return NO;
                    125: }
                    126: 

Webmaster