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