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