1 /* HTHeader.c
2 ** EXTRA HEADER MANAGER
3 **
4 ** (c) COPYRIGHT MIT 1995.
5 ** Please first read the full copyright statement in the file COPYRIGH.
6 ** @(#) $Id$
7 **
8 ** HISTORY:
9 ** 2 Nov 95 HFN Written on a rainy night
10 */
11
12 /* Library Include files */
13 #include "wwwsys.h"
14 #include "HTUtils.h"
15 #include "HTString.h"
16 #include "HTParse.h"
17 #include "HTString.h"
18 #include "HTReq.h"
19 #include "HTHeader.h" /* Implemented here */
20 #include "HTMIMPrs.h"
21
22 HTMIMEParseSet * ParseSet = NULL;
23 PRIVATE HTList * HTGenerators = NULL;
24
25 /* --------------------------------------------------------------------------*/
26
27 /*
28 ** Register a Header generator to be called when we make request
29 */
HTGenerator_add(HTList * gens,HTPostCallback * callback)30 PUBLIC BOOL HTGenerator_add (HTList * gens, HTPostCallback * callback)
31 {
32 return callback ? HTList_addObject(gens, (void *) callback) : NO;
33 }
34
35 /*
36 ** Unregister a Header generator
37 */
HTGenerator_delete(HTList * gens,HTPostCallback * callback)38 PUBLIC BOOL HTGenerator_delete (HTList * gens, HTPostCallback * callback)
39 {
40 return callback ? HTList_removeObject(gens, (void *) callback) : NO;
41 }
42
43 /*
44 ** Delete the list of registered header generators.
45 */
HTGenerator_deleteAll(HTList * gens)46 PUBLIC BOOL HTGenerator_deleteAll (HTList * gens)
47 {
48 return HTList_delete(gens);
49 }
50
51 /* ------------------------------------------------------------------------- */
52 /* GLOBAL LIST OF PARSERS AND GENERATORS */
53 /* ------------------------------------------------------------------------- */
54
55 /*
56 ** Global List of parsers. list can be NULL
57 */
HTHeader_setMIMEParseSet(HTMIMEParseSet * list)58 PUBLIC void HTHeader_setMIMEParseSet (HTMIMEParseSet * list)
59 {
60 ParseSet = list;
61 }
62
HTHeader_MIMEParseSet(void)63 PUBLIC HTMIMEParseSet * HTHeader_MIMEParseSet (void)
64 {
65 return ParseSet;
66 }
67
HTHeader_addParser(const char * token,BOOL case_sensitive,HTParserCallback * callback)68 PUBLIC BOOL HTHeader_addParser (const char * token, BOOL case_sensitive,
69 HTParserCallback * callback)
70 {
71 if (!ParseSet) ParseSet = HTMIMEParseSet_new(MIME_HASH_SIZE);
72 else HTHeader_deleteParser(token); /* Remove duplicates */
73 return (HTMIMEParseSet_add(ParseSet, token, case_sensitive, callback) != NULL);
74 }
75
HTHeader_addRegexParser(const char * token,BOOL case_sensitive,HTParserCallback * callback)76 PUBLIC BOOL HTHeader_addRegexParser (const char * token, BOOL case_sensitive,
77 HTParserCallback * callback)
78 {
79 if (!ParseSet) ParseSet = HTMIMEParseSet_new(MIME_HASH_SIZE);
80 return (HTMIMEParseSet_addRegex(ParseSet, token, case_sensitive, callback) != NULL);
81 }
82
HTHeader_deleteParser(const char * token)83 PUBLIC BOOL HTHeader_deleteParser (const char * token)
84 {
85 return HTMIMEParseSet_delete(ParseSet, token);
86 }
87
88 /*
89 ** Global List of header generators. list can be NULL
90 */
HTHeader_setGenerator(HTList * list)91 PUBLIC void HTHeader_setGenerator (HTList * list)
92 {
93 HTGenerators = list;
94 }
95
HTHeader_generator(void)96 PUBLIC HTList * HTHeader_generator (void)
97 {
98 return HTGenerators;
99 }
100
HTHeader_addGenerator(HTPostCallback * callback)101 PUBLIC BOOL HTHeader_addGenerator (HTPostCallback * callback)
102 {
103 if (!HTGenerators) HTGenerators = HTList_new();
104 return HTGenerator_add(HTGenerators, callback);
105 }
106
HTHeader_deleteGenerator(HTPostCallback * callback)107 PUBLIC BOOL HTHeader_deleteGenerator (HTPostCallback * callback)
108 {
109 if (!HTGenerators) return NO;
110 return HTGenerator_delete(HTGenerators, callback);
111 }
112
113 /*
114 ** Convenience function to clean up
115 */
HTHeader_deleteAll(void)116 PUBLIC void HTHeader_deleteAll (void)
117 {
118 HTMIMEParseSet_deleteAll(ParseSet);
119 if (HTGenerators) {
120 HTGenerator_deleteAll(HTGenerators);
121 HTGenerators = NULL;
122 }
123 }
124
125