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