xref: /haiku/headers/private/netservices/HttpHeaders.h (revision 603e0bdf6208f145a0ef40cd37c71b0f285c1d96)
1*603e0bdfSNiels Sascha Reedijk /*
2*603e0bdfSNiels Sascha Reedijk  * Copyright 2010 Haiku Inc. All rights reserved.
3*603e0bdfSNiels Sascha Reedijk  * Distributed under the terms of the MIT License.
4*603e0bdfSNiels Sascha Reedijk  */
5*603e0bdfSNiels Sascha Reedijk #ifndef _B_HTTP_HEADERS_H_
6*603e0bdfSNiels Sascha Reedijk #define _B_HTTP_HEADERS_H_
7*603e0bdfSNiels Sascha Reedijk 
8*603e0bdfSNiels Sascha Reedijk 
9*603e0bdfSNiels Sascha Reedijk #include <List.h>
10*603e0bdfSNiels Sascha Reedijk #include <Message.h>
11*603e0bdfSNiels Sascha Reedijk #include <String.h>
12*603e0bdfSNiels Sascha Reedijk 
13*603e0bdfSNiels Sascha Reedijk 
14*603e0bdfSNiels Sascha Reedijk class BHttpHeader {
15*603e0bdfSNiels Sascha Reedijk public:
16*603e0bdfSNiels Sascha Reedijk 								BHttpHeader();
17*603e0bdfSNiels Sascha Reedijk 								BHttpHeader(const char* string);
18*603e0bdfSNiels Sascha Reedijk 								BHttpHeader(const char* name,
19*603e0bdfSNiels Sascha Reedijk 									const char* value);
20*603e0bdfSNiels Sascha Reedijk 								BHttpHeader(const BHttpHeader& copy);
21*603e0bdfSNiels Sascha Reedijk 
22*603e0bdfSNiels Sascha Reedijk 	// Header data modification
23*603e0bdfSNiels Sascha Reedijk 			void				SetName(const char* name);
24*603e0bdfSNiels Sascha Reedijk 			void				SetValue(const char* value);
25*603e0bdfSNiels Sascha Reedijk 			bool				SetHeader(const char* string);
26*603e0bdfSNiels Sascha Reedijk 
27*603e0bdfSNiels Sascha Reedijk 	// Header data access
28*603e0bdfSNiels Sascha Reedijk 			const char*			Name() const;
29*603e0bdfSNiels Sascha Reedijk 			const char*			Value() const;
30*603e0bdfSNiels Sascha Reedijk 			const char*			Header() const;
31*603e0bdfSNiels Sascha Reedijk 
32*603e0bdfSNiels Sascha Reedijk 	// Header data test
33*603e0bdfSNiels Sascha Reedijk 			bool				NameIs(const char* name) const;
34*603e0bdfSNiels Sascha Reedijk 
35*603e0bdfSNiels Sascha Reedijk 	// Overloaded members
36*603e0bdfSNiels Sascha Reedijk 			BHttpHeader&		operator=(const BHttpHeader& other);
37*603e0bdfSNiels Sascha Reedijk 
38*603e0bdfSNiels Sascha Reedijk private:
39*603e0bdfSNiels Sascha Reedijk 			BString				fName;
40*603e0bdfSNiels Sascha Reedijk 			BString				fValue;
41*603e0bdfSNiels Sascha Reedijk 
42*603e0bdfSNiels Sascha Reedijk 	mutable	BString				fRawHeader;
43*603e0bdfSNiels Sascha Reedijk 	mutable	bool				fRawHeaderValid;
44*603e0bdfSNiels Sascha Reedijk };
45*603e0bdfSNiels Sascha Reedijk 
46*603e0bdfSNiels Sascha Reedijk 
47*603e0bdfSNiels Sascha Reedijk class BHttpHeaders {
48*603e0bdfSNiels Sascha Reedijk public:
49*603e0bdfSNiels Sascha Reedijk 								BHttpHeaders();
50*603e0bdfSNiels Sascha Reedijk 								BHttpHeaders(const BHttpHeaders& copy);
51*603e0bdfSNiels Sascha Reedijk 								~BHttpHeaders();
52*603e0bdfSNiels Sascha Reedijk 
53*603e0bdfSNiels Sascha Reedijk 	// Header list access
54*603e0bdfSNiels Sascha Reedijk 			const char*			HeaderValue(const char* name) const;
55*603e0bdfSNiels Sascha Reedijk 			BHttpHeader&		HeaderAt(int32 index) const;
56*603e0bdfSNiels Sascha Reedijk 
57*603e0bdfSNiels Sascha Reedijk 	// Header count
58*603e0bdfSNiels Sascha Reedijk 			int32				CountHeaders() const;
59*603e0bdfSNiels Sascha Reedijk 
60*603e0bdfSNiels Sascha Reedijk 	// Header list tests
61*603e0bdfSNiels Sascha Reedijk 			int32				HasHeader(const char* name) const;
62*603e0bdfSNiels Sascha Reedijk 
63*603e0bdfSNiels Sascha Reedijk 	// Header add or replacement
64*603e0bdfSNiels Sascha Reedijk 			bool				AddHeader(const char* line);
65*603e0bdfSNiels Sascha Reedijk 			bool				AddHeader(const char* name,
66*603e0bdfSNiels Sascha Reedijk 									const char* value);
67*603e0bdfSNiels Sascha Reedijk 			bool				AddHeader(const char* name,
68*603e0bdfSNiels Sascha Reedijk 									int32 value);
69*603e0bdfSNiels Sascha Reedijk 
70*603e0bdfSNiels Sascha Reedijk 	// Archiving
71*603e0bdfSNiels Sascha Reedijk 			void				PopulateFromArchive(BMessage*);
72*603e0bdfSNiels Sascha Reedijk 			void				Archive(BMessage*) const;
73*603e0bdfSNiels Sascha Reedijk 
74*603e0bdfSNiels Sascha Reedijk 	// Header deletion
75*603e0bdfSNiels Sascha Reedijk 			void				Clear();
76*603e0bdfSNiels Sascha Reedijk 
77*603e0bdfSNiels Sascha Reedijk 	// Overloaded operators
78*603e0bdfSNiels Sascha Reedijk 			BHttpHeaders&		operator=(const BHttpHeaders& other);
79*603e0bdfSNiels Sascha Reedijk 			BHttpHeader&		operator[](int32 index) const;
80*603e0bdfSNiels Sascha Reedijk 			const char*			operator[](const char* name) const;
81*603e0bdfSNiels Sascha Reedijk 
82*603e0bdfSNiels Sascha Reedijk private:
83*603e0bdfSNiels Sascha Reedijk 			void				_EraseData();
84*603e0bdfSNiels Sascha Reedijk 			bool				_AddOrDeleteHeader(BHttpHeader* header);
85*603e0bdfSNiels Sascha Reedijk 
86*603e0bdfSNiels Sascha Reedijk private:
87*603e0bdfSNiels Sascha Reedijk 			BList				fHeaderList;
88*603e0bdfSNiels Sascha Reedijk };
89*603e0bdfSNiels Sascha Reedijk 
90*603e0bdfSNiels Sascha Reedijk #endif // _B_HTTP_HEADERS_H_
91