140 lines
3.7 KiB
C
140 lines
3.7 KiB
C
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
/*
|
|
* pkix_pl_httpdefaultclient.h
|
|
*
|
|
* HTTPDefaultClient Object Type Definition
|
|
*
|
|
*/
|
|
|
|
#ifndef _PKIX_PL_HTTPDEFAULTCLIENT_H
|
|
#define _PKIX_PL_HTTPDEFAULTCLIENT_H
|
|
|
|
#include "pkix_pl_common.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define HTTP_DATA_BUFSIZE 4096
|
|
#define HTTP_HEADER_BUFSIZE 1024
|
|
#define HTTP_MIN_AVAILABLE_BUFFER_SIZE 512
|
|
|
|
typedef enum {
|
|
HTTP_NOT_CONNECTED,
|
|
HTTP_CONNECT_PENDING,
|
|
HTTP_CONNECTED,
|
|
HTTP_SEND_PENDING,
|
|
HTTP_RECV_HDR,
|
|
HTTP_RECV_HDR_PENDING,
|
|
HTTP_RECV_BODY,
|
|
HTTP_RECV_BODY_PENDING,
|
|
HTTP_COMPLETE,
|
|
HTTP_ERROR
|
|
} HttpConnectStatus;
|
|
|
|
typedef enum {
|
|
HTTP_POST_METHOD,
|
|
HTTP_GET_METHOD
|
|
} HttpMethod;
|
|
|
|
struct PKIX_PL_HttpDefaultClientStruct {
|
|
HttpConnectStatus connectStatus;
|
|
PRUint16 portnum;
|
|
PRIntervalTime timeout;
|
|
PKIX_UInt32 bytesToWrite;
|
|
PKIX_UInt32 send_http_data_len;
|
|
PKIX_UInt32 rcv_http_data_len;
|
|
PKIX_UInt32 capacity;
|
|
PKIX_UInt32 filledupBytes;
|
|
PKIX_UInt32 responseCode;
|
|
PKIX_UInt32 maxResponseLen;
|
|
PKIX_UInt32 GETLen;
|
|
PKIX_UInt32 POSTLen;
|
|
PRUint32 *pRcv_http_data_len;
|
|
PRPollDesc pollDesc;
|
|
void *callbackList; /* cast this to (PKIX_PL_Socket_Callback *) */
|
|
char *GETBuf;
|
|
char *POSTBuf;
|
|
char *rcvBuf;
|
|
char *host;
|
|
char *path;
|
|
char *rcvContentType;
|
|
void *rcvHeaders;
|
|
HttpMethod send_http_method;
|
|
const char *send_http_content_type;
|
|
const char *send_http_data;
|
|
PRUint16 *rcv_http_response_code;
|
|
const char **rcv_http_content_type;
|
|
const char **rcv_http_headers;
|
|
const char **rcv_http_data;
|
|
PKIX_PL_Socket *socket;
|
|
void *plContext;
|
|
};
|
|
|
|
/* see source file for function documentation */
|
|
|
|
PKIX_Error *pkix_pl_HttpDefaultClient_RegisterSelf(void *plContext);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_CreateSessionFcn(
|
|
const char *host,
|
|
PRUint16 portnum,
|
|
SEC_HTTP_SERVER_SESSION *pSession);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_KeepAliveSessionFcn(
|
|
SEC_HTTP_SERVER_SESSION session,
|
|
PRPollDesc **pPollDesc);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_FreeSessionFcn(
|
|
SEC_HTTP_SERVER_SESSION session);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_RequestCreateFcn(
|
|
SEC_HTTP_SERVER_SESSION session,
|
|
const char *http_protocol_variant, /* usually "http" */
|
|
const char *path_and_query_string,
|
|
const char *http_request_method,
|
|
const PRIntervalTime timeout,
|
|
SEC_HTTP_REQUEST_SESSION *pRequest);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_SetPostDataFcn(
|
|
SEC_HTTP_REQUEST_SESSION request,
|
|
const char *http_data,
|
|
const PRUint32 http_data_len,
|
|
const char *http_content_type);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_AddHeaderFcn(
|
|
SEC_HTTP_REQUEST_SESSION request,
|
|
const char *http_header_name,
|
|
const char *http_header_value);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_TrySendAndReceiveFcn(
|
|
SEC_HTTP_REQUEST_SESSION request,
|
|
PRPollDesc **pPollDesc,
|
|
PRUint16 *http_response_code,
|
|
const char **http_response_content_type,
|
|
const char **http_response_headers,
|
|
const char **http_response_data,
|
|
PRUint32 *http_response_data_len);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_CancelFcn(
|
|
SEC_HTTP_REQUEST_SESSION request);
|
|
|
|
SECStatus
|
|
pkix_pl_HttpDefaultClient_FreeFcn(
|
|
SEC_HTTP_REQUEST_SESSION request);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _PKIX_PL_HTTPDEFAULTCLIENT_H */
|