| /* 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 */ |