/usr/include/ZenLib/HTTP_Client/HTTPClient.h is in libzen-dev 0.4.32-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 | #ifndef _HTTP_CLIENT
#define _HTTP_CLIENT
#include "HTTPClientWrapper.h"
#include "HTTPClientCommon.h"
#ifdef __cplusplus
extern "C" {
#endif
///////////////////////////////////////////////////////////////////////////////
//
// Section : HTTP API global definitions
// Last updated : 01/09/2005
//
///////////////////////////////////////////////////////////////////////////////
#ifdef _HTTP_BUILD_AMT
#define CMSI_HTTPCLIENT_PROTOCOL_GUID {0x471b2c0e, 0x6137, 0x4d55, 0x92, 0x36, 0xdd, 0x0f, 0xdb, 0xc2, 0x52, 0xfb}
#endif
// Debug hook
// #define _HTTP_DEBUGGING_ // Simply dumps more debugging data to the console
// API Version
#define HTTP_CLIENT_VERSION_MINOR 0
#define HTTP_CLIENT_VERSION_MAJOR 1
// Global default sizes
#define HTTP_CLIENT_MAX_SEND_RECV_HEADERS 1024 // Maximum Send and receive buffers size
#define HTTP_CLIENT_INIT_SEND_RECV_HEADERS 2048 // If we can resize the buffers this would be the initial size
#define HTTP_CLIENT_MAX_USERNAME_LENGTH 16 // Maximum length the user name (host and proxy authentication)
#define HTTP_CLIENT_MAX_PASSWORD_LENGTH 16 // Maximum length for the password
// Maximum length for the base 64 encoded credentials (twice the size of the user name and password max parameters)
#define HTTP_CLIENT_MAX_64_ENCODED_CRED ((HTTP_CLIENT_MAX_USERNAME_LENGTH + HTTP_CLIENT_MAX_PASSWORD_LENGTH) * 2) + 4
#define HTTP_CLIENT_MAX_CHUNK_HEADER 64 // Maximum length for the received chunk header (hex - string) size
#define HTTP_CLIENT_MAX_PROXY_HOST_LENGTH 64 // Maximum length for the proxy host name
#define HTTP_CLIENT_MAX_TOKEN_LENGTH 512 // Maximum length for an HTTP token data (authentication header elements)
#define HTTP_CLIENT_MAX_TOKEN_NAME_LENGTH 32 // Maximum length for an HTTP authorization token name ("qop")
#define HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE 1024 // Maximum length for a search clue string (Headers searching)
#define HTTP_CLIENT_ALLOW_HEAD_VERB 0 // Can we use the HTTP HEAD verb in our outgoing requests?
#define HTTP_CLIENT_MEMORY_RESIZABLE FALSE // Permission to dynamically resize the headers buffer
#define HTTP_CLIENT_MEMORY_RESIZE_FACTOR 16 // Factor for memory resizing operation
#define HTTP_CLIENT_DEFAULT_PORT 80 // Default HTTP port
#define HTTP_CLIENT_DEFAULT_SSL_PORT 443 // Default HTTPS port
#define HTTP_CLIENT_DEFAULT_VERB 0 // GET
#define HTTP_CLIENT_DEFAULT_VER "HTTP/1.1" // We will send this in the outgoing header
#define HTTP_CLIENT_DEFAULT_PROXY_VER "HTTP/1.0" // We will send this in the outgoing header (proxy)
#define HTTP_CLIENT_DEFAULT_AGENT "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
#define HTTP_CLIENT_DEFAULT_TIMEOUT 30 // Default timeout in seconds
#define HTTP_CLIENT_DEFAULT_KEEP_ALIVE 30 // Default Keep-alive value in seconds
#define HTTP_CLIENT_DEFAULT_DIGEST_AUTH "MD5" // This is for bypassing a known bug in AMT05..
#define HTTP_CLIENT_DEFAULT_PROXY_AUTH 1 // Basic
#define HTTP_CLIENT_CRLF "\r\n" // End of line macro
#define HTTP_CLIENT_CRLFX2 "\r\n\r\n" // Double End of line macro
// HTTP Session internal API flags
// Note: Not intended to be set the by the API user
#define HTTP_CLIENT_FLAG_SECURE 0x00000010 // The session is secured using TLS
#define HTTP_CLIENT_FLAG_URLANDPORT 0x00000020 // Url has a port within
#define HTTP_CLIENT_FLAG_URLHTTPS 0x00000040 // Url has a https prefix
#define HTTP_CLIENT_FLAG_USINGPROXY 0x00000080 // Operation will be performed using a proxy server
#define HTTP_CLIENT_FLAG_CHUNKED 0x00000100 // The incoming data is chunked
// HTTP Status codes
#define HTTP_STATUS_OK 200 // The request has succeeded
#define HTTP_STATUS_UNAUTHORIZED 401 // The request requires user authentic
#define HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED 407 // The client must first authenticate itself with the proxy
// Redirection (Note: there are more 30x codes, those are the most popular)
#define HTTP_STATUS_OBJECT_MOVED 302 // Page redirection notification
#define HTTP_STATUS_OBJECT_MOVED_PERMANENTLY 301 // Page redirection notification
#define HTTP_STATUS_CONTINUE 100 // Page continue message
// MIN AMX macro
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
// HTTP timeout macro for selecting the default value if the caller passed 0 (no timeout) to the function
#define HTTP_TIMEOUT(nTimeout) (((nTimeout) > (0)) ? (nTimeout) : (HTTP_CLIENT_DEFAULT_TIMEOUT))
// 32 bit alignment macro
#define ALIGN(size) ((size & 0xfffffffc) + ((size & 3) ? 4 : 0))
#ifdef _HTTP_DEBUGGING_
typedef VOID _stdcall E_HTTPDebug(const char *,const char*,UINT32,char *,...); // HTTPDebug hook function
#endif
///////////////////////////////////////////////////////////////////////////////
//
// Section : HTTP API internals structures
// Last updated : 01/09/2005
//
///////////////////////////////////////////////////////////////////////////////
// Generic parameter structure contains a pointer to the buffer and its length
typedef struct _HTTP_PARAM
{
CHAR *pParam;
UINT32 nLength;
} HTTP_PARAM;
// HTTP socket events
typedef struct _HTTP_CONNECTION
{
fd_set FDRead; // socket read event
fd_set FDWrite; // socket write event
fd_set FDError; // socket error event
INT32 HttpSocket; // The underling socket
UINT32 HttpStartTime; // Time stamp for the session
UINT32 HttpClientPort; // For client side binding
BOOL TlsNego; // TLS negotiation flag
} HTTP_CONNECTION;
// Request URL
typedef struct _HTTP_URL
{
HTTP_PARAM UrlBsee; // a pointer and length to the "http" section of the URL
HTTP_PARAM UrlHost; // a pointer and length to the host section of the URL
HTTP_PARAM UrlPort; // a pointer and length to the PORT (if was specified section)
HTTP_PARAM UrlRequest; // a pointer and length of the request section of the URL
UINT16 nPort; // the PORT that we should use (could be default or the one found within the URL)
CHAR Url[HTTP_CLIENT_MAX_URL_LENGTH]; // a buffer for the URL
}HTTP_URL;
// HTTP headers (incoming and outgoing)
typedef struct _HTTP_HEADERS
{
HTTP_PARAM HeadersBuffer; // a pointer and length of the complete Headers (in\out) buffer
HTTP_PARAM HeadersOut; // a pointer and length of the outgoing HTTP headers
HTTP_PARAM HeadersIn; // a pointer and length of the incoming headers
HTTP_PARAM HeaderSearch; // Index and pointer for the header search functions
HTTP_VERB HttpVerb; // the HTTP verb that was used in the session
HTTP_VERB HttpLastVerb; // the HTTP verb that was last transmited to the server
CHAR SearchClue[HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE];
CHAR Verb[16]; // the actual string buffer of the HTTP verb
}HTTP_HEADERS;
// HTTP headers (parsed headers information)
typedef struct _HTTP_HEADERS_INFO
{
HTTP_PARAM HttpRedirectURL; // Stores the redirection URL if we got a 301 or 303 return code
UINT32 nHTTPStatus; // the HTTP status code (200 401 407 act')
UINT32 nHTTPContentLength; // the Content length if specified of the returned data
UINT32 nHTTPPostContentLength;// the Content-Length of the POSTed data (if known)
BOOL Connection; // True = Keep alive or undefined, False = Closed
BOOL ValidHeaders; // a flag that indicates if the incoming header ware parsed OK and found to be valid
BOOL HaveCredentials; // a flag that indicates if we have credentials for the session
CHAR HTTPVersion[16]; // HTTP version string buffer (for example: "HTTP 1.1")
}HTTP_HEADERS_INFO;
// Authentication parameters that ware extracted from the incoming headers
typedef struct _HTTP_AUTH_HEADER
{
HTTP_PARAM AuthHeader; // the pointer and length of the authentication header
UINT32 HTTP_AUTH_SCHEMA; // Its schema (could be any of the supported)
}HTTP_AUTH_HEADER;
// Proxy related data
typedef struct _HTTP_PROXY
{
CHAR ProxyHost[HTTP_CLIENT_MAX_PROXY_HOST_LENGTH];
CHAR ProxtUser[HTTP_CLIENT_MAX_USERNAME_LENGTH];
CHAR ProxyPassword[HTTP_CLIENT_MAX_PASSWORD_LENGTH];
UINT16 nProxyPort;
CHAR AuthSchemaName[16]; // The authentication schema name (for string comperission)
HTTP_AUTH_SCHEMA ProxyAuthSchema;
}HTTP_PROXY;
// HTTP User credentials
typedef struct _HTTP_CREDENTIALS
{
CHAR CredUser[HTTP_CLIENT_MAX_USERNAME_LENGTH];
CHAR CredPassword[HTTP_CLIENT_MAX_PASSWORD_LENGTH];
CHAR AuthSchemaName[16]; // The authentication schema name (for string comperission)
HTTP_AUTH_SCHEMA CredAuthSchema; // The schema that calle has selected for the session
BOOL Authentication; // a flag that indicates that this session has requested a user authentication
}HTTP_CREDENTIALS;
// HTTP Counters
typedef struct _HTTP_COUNTERS
{
UINT32 nRecivedHeaderLength; // Bytes count of the incoming header
UINT32 nRecivedBodyLength; // Bytes count of the incoming body length
UINT32 nRecivedChunkLength; // The next chunk length in bytes
UINT32 nBytesToNextChunk; // How many bytes we have to read until we can expect the next chunk
UINT32 nActionStartTime; // Operation start time
UINT32 nActionTimeout; // Timeout for the session
UINT32 nSentChunks; // Count of sent chunks
UINT32 nSentBodyBytes; // Count of body bytes that ware sent
UINT32 nSentHeaderBytes; // Count of header bytes thhat ware sent
}HTTP_COUNTERS;
// HTTP Client Session data
typedef struct _HTTP_REQUEST
{
HTTP_URL HttpUrl;
HTTP_HEADERS HttpHeaders;
HTTP_HEADERS_INFO HttpHeadersInfo;
HTTP_AUTH_HEADER HttpAuthHeader;
HTTP_PROXY HttpProxy;
HTTP_CREDENTIALS HttpCredentials;
HTTP_CONNECTION HttpConnection;
HTTP_COUNTERS HttpCounters;
UINT32 HttpState;
UINT32 HttpFlags;
#ifdef _HTTP_DEBUGGING_
E_HTTPDebug *pDebug;
#endif
} HTTP_SESSION, *P_HTTP_SESSION;
// HTTP Type Definitions
typedef UINT32 HTTP_SESSION_HANDLE;
typedef UINT32 HTTP_CLIENT_SESSION_FLAGS;
///////////////////////////////////////////////////////////////////////////////
//
// Section : HTTP API public interface
// Last updated : 01/09/2005
//
///////////////////////////////////////////////////////////////////////////////
HTTP_SESSION_HANDLE HTTPClientOpenRequest (HTTP_CLIENT_SESSION_FLAGS Flags);
UINT32 HTTPClientCloseRequest (HTTP_SESSION_HANDLE *pSession);
UINT32 HTTPClientSetLocalConnection (HTTP_SESSION_HANDLE pSession, UINT32 nPort);
UINT32 HTTPClientSetAuth (HTTP_SESSION_HANDLE pSession, HTTP_AUTH_SCHEMA AuthSchema, void *pReserved);
UINT32 HTTPClientSetCredentials (HTTP_SESSION_HANDLE pSession, CHAR *pUserName, CHAR *pPassword);
UINT32 HTTPClientSetProxy (HTTP_SESSION_HANDLE pSession, CHAR *pProxyName, UINT16 nPort, CHAR *pUserName, CHAR *pPassword);
UINT32 HTTPClientSetVerb (HTTP_SESSION_HANDLE pSession, HTTP_VERB HttpVerb);
UINT32 HTTPClientAddRequestHeaders (HTTP_SESSION_HANDLE pSession, CHAR *pHeaderName, CHAR *pHeaderData, BOOL nInsert);
UINT32 HTTPClientSendRequest (HTTP_SESSION_HANDLE pSession, CHAR *pUrl, VOID *pData, UINT32 nDataLength, BOOL TotalLength, UINT32 nTimeout,UINT32 nClientPort);
UINT32 HTTPClientWriteData (HTTP_SESSION_HANDLE pSession, VOID *pBuffer, UINT32 nBufferLength, UINT32 nTimeout);
UINT32 HTTPClientRecvResponse (HTTP_SESSION_HANDLE pSession, UINT32 nTimeout);
UINT32 HTTPClientReadData (HTTP_SESSION_HANDLE pSession, VOID *pBuffer, UINT32 nBytesToRead, UINT32 nTimeout, UINT32 *nBytesRecived);
UINT32 HTTPClientGetInfo (HTTP_SESSION_HANDLE pSession, HTTP_CLIENT *HTTPClient);
UINT32 HTTPClientFindFirstHeader (HTTP_SESSION_HANDLE pSession, CHAR *pSearchClue,CHAR *pHeaderBuffer, UINT32 *nLength);
UINT32 HTTPClientGetNextHeader (HTTP_SESSION_HANDLE pSession, CHAR *pHeaderBuffer, UINT32 *nLength);
UINT32 HTTPClientFindCloseHeader (HTTP_SESSION_HANDLE pSession);
#ifdef _HTTP_DEBUGGING_
UINT32 HTTPClientSetDebugHook (HTTP_SESSION_HANDLE pSession,E_HTTPDebug *pDebug);
#endif
///////////////////////////////////////////////////////////////////////////////
//
// Section : HTTP API private function
// Last updated : 01/09/2005
//
///////////////////////////////////////////////////////////////////////////////
UINT32 HTTPIntrnResizeBuffer (P_HTTP_SESSION pHTTPSession, UINT32 nNewSize);
UINT32 HTTPIntrnSetURL (P_HTTP_SESSION pHTTPSession, CHAR *pUrl,UINT32 nUrlLength);
UINT32 HTTPIntrnConnectionClose (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnConnectionOpen (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnGetRemoteHeaders (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnGetRemoteChunkLength (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnSend (P_HTTP_SESSION pHTTPSession, CHAR *pData,UINT32 *nLength);
UINT32 HTTPIntrnRecv (P_HTTP_SESSION pHTTPSession, CHAR *pData,UINT32 *nLength,BOOL PeekOnly);
UINT32 HTTPIntrnParseAuthHeader (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnAuthHandler (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnAuthSendDigest (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnAuthSendBasic (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnAuthenticate (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnHeadersAdd (P_HTTP_SESSION pHTTPSession, CHAR *pHeaderName, UINT32 nNameLength, CHAR *pHeaderData, UINT32 nDataLength);
UINT32 HTTPIntrnHeadersRemove (P_HTTP_SESSION pHTTPSession, CHAR *pHeaderName);
UINT32 HTTPIntrnHeadersReceive (P_HTTP_SESSION pHTTPSession, UINT32 nTimeout);
UINT32 HTTPIntrnHeadersSend (P_HTTP_SESSION pHTTPSession, HTTP_VERB HttpVerb);
UINT32 HTTPIntrnHeadersParse (P_HTTP_SESSION pHTTPSession);
UINT32 HTTPIntrnHeadersFind (P_HTTP_SESSION pHTTPSession, CHAR *pHeaderName, HTTP_PARAM *pParam,BOOL IncommingHeaders,UINT32 nOffset);
UINT32 HTTPIntrnSessionReset (P_HTTP_SESSION pHTTPSession, BOOL EntireSession);
UINT32 HTTPIntrnSessionGetUpTime (VOID);
BOOL HTTPIntrnSessionEvalTimeout (P_HTTP_SESSION pHTTPSession);
#ifdef __cplusplus
}
#endif
#endif //_HTTP_CLIENT
|