[BACK] Return to HTTrans.c CVS log [TXT] [DIR] Up to [Public] / libwww / Library / src

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

AltStyle によって変換されたページ (->オリジナル) /