You.i Engine
YiHTTPResponse.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_HTTP_RESPONSE_H_
3 #define _YI_HTTP_RESPONSE_H_
4 
7 #include "utility/YiString.h"
8 
9 #include <memory>
10 
11 class CYIHTTPRequest;
12 class CYIUrl;
13 
25 {
26 public:
28  {
31  };
32 
34  {
39  };
40 
41  enum STATUS
42  {
47  };
48 
50  virtual ~CYIHTTPResponse();
51 
52  static size_t ReceiveResponse(char *pBuffer, size_t nSize, size_t nNumBytes, void *pContext);
53  static std::shared_ptr<CYIHTTPResponse> CreateFromBytes(char *pHeaders, size_t pHeadersSize, char *pResponse, size_t uResponseSize);
54 
58  void Reserve(uint32_t nSize) const;
59 
63  STATUS GetStatus() const;
64 
68  void SetStatus(STATUS eStatus);
69 
73  const std::vector<char> & GetRawData() const;
74 
78  void SetRequestID(const int32_t id);
79 
83  uint32_t GetSize() const;
84 
88  int32_t GetHeaderHTTPStatusCode() const;
89 
93  CYIString GetBody() const;
94 
98  const CYIString &GetHeader() const;
99 
105  const std::map<CYIString, CYIString> GetHeaders() const;
106 
111  bool IsCacheable() const;
112 
117  bool ShouldBeStored() const;
118 
123  int32_t GetMaxAgeInSeconds() const;
124 
129  int32_t GetExpiresInSeconds() const;
130 
134  const CYIString &GetETagValue() const;
135 
140 
145 
149  uint32_t GetContentLength() const;
150 
154  const CYIString &GetContentEncoding() const;
155 
161  const CYIString &GetLastModifiedDate() const;
162 
168  const CYIString &GetResponseDate() const;
169 
179  bool IsHeuristicallyExpired() const;
180 
190  bool IsExpired() const;
191 
197  void Process(const std::shared_ptr<CYIHTTPRequest> &pRequest);
198 
199 protected:
200  void SetMaxAgeInSeconds(int32_t nMaxAge);
201  void SetExpiresInSeconds(int32_t nExpires);
202  void SetShouldStoreResponse(bool bStoreResponse);
203  void SetETagValue(const CYIString &rETag);
204  void SetContentType(CONTENT_TYPE eType);
206  void SetContentEncoding(const CYIString &rContentEncoding);
207  void SetLastModifiedDate(const CYIString &rLastModifiedDate);
208  void SetResponseDate(const CYIString &rResponseDate);
209 
210 private:
211  void AppendData(char *pBuffer, size_t bufferSize);
212 
213  void ParseHeader(const CYIString &rHeader);
214  void ParseHeaderKeyValue(const CYIString &rKey, const CYIString &rValue);
215 
216  void ParseCacheControlValue(const CYIString &rValue);
217  void ParsePragmaValue(const CYIString &rValue);
218  void ParseExpiresValue(const CYIString &rValue);
219  void ParseContentType(const CYIString &rValue);
220  void ParseContentLength(const CYIString &rValue);
221 
222  int32_t SplitPropKeyValue(const CYIString &rString, CYIString &rKey, CYIString &rValue);
223 
224  mutable CYIRecursiveMutex m_mutex;
225 
226  mutable int32_t m_nHeaderHTTPStatusCode;
227 
228  // HTTP response buffer
229  mutable std::vector<char> m_responseBuffer;
230 
231  CYIString m_HTTPResponseHeader;
232  const char *m_HTTPResponseBody; // for viewing in a debugger only
233 
234  int32_t m_nRequestId;
235 
236  int32_t m_nMaxAgeInSeconds;
237  int32_t m_nExpiresInSeconds;
238  bool m_bShouldBeStored;
239  CYIString m_eTag;
240  CONTENT_TYPE m_eContentType;
241  uint32_t m_uContentLength;
242  CACHE_CONTROL_TYPE m_eCacheControlType;
243  CYIString m_ContentEncoding;
244  CYIString m_LastModifiedDate;
245  CYIString m_ResponseDate;
246  STATUS m_eStatus;
247 };
248 
253 #endif // _YI_HTTP_RESPONSE_H_
void SetContentType(CONTENT_TYPE eType)
void SetResponseDate(const CYIString &rResponseDate)
Definition: YiHTTPResponse.h:36
static std::shared_ptr< CYIHTTPResponse > CreateFromBytes(char *pHeaders, size_t pHeadersSize, char *pResponse, size_t uResponseSize)
const CYIString & GetETagValue() const
CACHE_CONTROL_TYPE GetCacheControlType() const
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
Definition: YiHTTPResponse.h:43
STATUS GetStatus() const
const CYIString & GetResponseDate() const
Contains information required to configure and perform a HTTP request.
Definition: YiHTTPRequest.h:34
const std::vector< char > & GetRawData() const
Definition: YiHTTPResponse.h:44
void SetMaxAgeInSeconds(int32_t nMaxAge)
int32_t GetMaxAgeInSeconds() const
The base class for an object accessible from script source code.
Definition: YiScriptableObject.h:28
const CYIString & GetContentEncoding() const
Definition: YiRecursiveMutex.h:15
void SetShouldStoreResponse(bool bStoreResponse)
Definition: YiHTTPResponse.h:38
const CYIString & GetHeader() const
void Process(const std::shared_ptr< CYIHTTPRequest > &pRequest)
CONTENT_TYPE
Definition: YiHTTPResponse.h:27
int32_t GetExpiresInSeconds() const
Definition: YiHTTPResponse.h:30
void SetCacheControlType(CACHE_CONTROL_TYPE eType)
Definition: YiHTTPResponse.h:46
void SetETagValue(const CYIString &rETag)
An HTTP response class which includes the header and body portions of the response.
Definition: YiHTTPResponse.h:24
bool ShouldBeStored() const
void SetContentEncoding(const CYIString &rContentEncoding)
virtual ~CYIHTTPResponse()
Definition: YiHTTPResponse.h:45
bool IsExpired() const
Definition: YiHTTPResponse.h:35
CACHE_CONTROL_TYPE
Definition: YiHTTPResponse.h:33
bool IsHeuristicallyExpired() const
Definition: YiHTTPResponse.h:37
void SetRequestID(const int32_t id)
STATUS
Definition: YiHTTPResponse.h:41
A class used to encapsulate an URL.
Definition: YiUrl.h:24
CONTENT_TYPE GetContentType() const
CYIString GetBody() const
bool IsCacheable() const
const std::map< CYIString, CYIString > GetHeaders() const
Definition: YiHTTPResponse.h:29
int32_t GetHeaderHTTPStatusCode() const
uint32_t GetContentLength() const
static size_t ReceiveResponse(char *pBuffer, size_t nSize, size_t nNumBytes, void *pContext)
const CYIString & GetLastModifiedDate() const
uint32_t GetSize() const
void SetExpiresInSeconds(int32_t nExpires)
void SetLastModifiedDate(const CYIString &rLastModifiedDate)
void Reserve(uint32_t nSize) const
void SetStatus(STATUS eStatus)