mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
132 lines
5.9 KiB
C
132 lines
5.9 KiB
C
/*H********************************************************************************/
|
|
/*!
|
|
\File protohttpmanager.h
|
|
|
|
\Description
|
|
High-level module designed to create and manage a pool of ProtoHttp refs. A
|
|
client application can submit rapid-fire http requests and ProtoHttpManager
|
|
will distribute them efficiently across the ref pool internally, queuing
|
|
them for efficient use of keep-alive and pipelining requests where possible.
|
|
|
|
\Notes
|
|
None.
|
|
|
|
\Todo
|
|
Pipelining
|
|
|
|
\Copyright
|
|
Copyright (c) Electronic Arts 2009.
|
|
|
|
\Version 1.0 05/20/2009 (jbrookes) First Version
|
|
*/
|
|
/********************************************************************************H*/
|
|
|
|
#ifndef _protohttpmanager_h
|
|
#define _protohttpmanager_h
|
|
|
|
/*!
|
|
\Moduledef ProtoHttpManager ProtoHttpManager
|
|
\Modulemember Proto
|
|
*/
|
|
//@{
|
|
|
|
/*** Include files ****************************************************************/
|
|
|
|
#include "DirtySDK/platform.h"
|
|
#include "DirtySDK/proto/protohttp.h"
|
|
|
|
/*** Defines **********************************************************************/
|
|
|
|
/*** Macros ***********************************************************************/
|
|
|
|
/*** Type Definitions *************************************************************/
|
|
|
|
//! httpmanager stats
|
|
typedef struct HttpManagerStatT
|
|
{
|
|
uint32_t uNumActiveTransactions; //!< current number of active transactions
|
|
uint32_t uMaxActiveTransactions; //!< maximum (highwater) number of active transactions
|
|
uint32_t uNumQueuedTransactions; //!< current number of queued transactions
|
|
uint32_t uMaxQueuedTransactions; //!< maximum (highwater) number of queued transactions
|
|
uint32_t uNumTransactions; //!< total number of transactions issued
|
|
uint32_t uNumKeepAliveTransactions; //!< total number of keep-alive transactions issued
|
|
uint32_t uNumPipelinedTransactions; //!< total number of pipelined transactions issued
|
|
uint32_t uSumQueueWaitLatency; //!< total amount of time spent waiting in queue
|
|
uint32_t uMaxQueueWaitLatency; //!< max time any single request had to wait
|
|
uint32_t uSumQueueFreeLatency; //!< total amount of time spent waiting for transaction to freed
|
|
uint32_t uMaxQueueFreeLatency; //!< max time any single transaction waited to be freed
|
|
uint64_t uTransactionBytes; //!< total bytes xferred
|
|
uint32_t uTransactionTime; //!< total transaction time
|
|
} HttpManagerStatT;
|
|
|
|
//! opaque module ref
|
|
typedef struct HttpManagerRefT HttpManagerRefT;
|
|
|
|
/*** Variables ********************************************************************/
|
|
|
|
/*** Functions ********************************************************************/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// allocate module state and prepare for use
|
|
DIRTYCODE_API HttpManagerRefT *HttpManagerCreate(int32_t iHttpBufSize, int32_t iHttpNumRefs);
|
|
|
|
// set custom header callback
|
|
DIRTYCODE_API void HttpManagerCallback(HttpManagerRefT *pHttpManager, ProtoHttpCustomHeaderCbT *pCustomHeaderCb, ProtoHttpReceiveHeaderCbT *pReceiveHeaderCb);
|
|
|
|
// destroy the module and release its state
|
|
DIRTYCODE_API void HttpManagerDestroy(HttpManagerRefT *pHttpManager);
|
|
|
|
// allocate a new transaction handle
|
|
DIRTYCODE_API int32_t HttpManagerAlloc(HttpManagerRefT *pHttpManager);
|
|
|
|
// release a transaction handle
|
|
DIRTYCODE_API void HttpManagerFree(HttpManagerRefT *pHttpManager, int32_t iHandle);
|
|
|
|
// initiate an HTTP transfer
|
|
DIRTYCODE_API int32_t HttpManagerGet(HttpManagerRefT *pHttpManager, int32_t iHandle, const char *pUrl, uint32_t bHeadOnly);
|
|
|
|
// return the actual url data
|
|
DIRTYCODE_API int32_t HttpManagerRecv(HttpManagerRefT *pHttpManager, int32_t iHandle, char *pBuffer, int32_t iBufMin, int32_t iBufMax);
|
|
|
|
// receive all of the response data
|
|
DIRTYCODE_API int32_t HttpManagerRecvAll(HttpManagerRefT *pHttpManager, int32_t iHandle, char *pBuffer, int32_t iBufSize);
|
|
|
|
// initiate transfer of data to to the server via an HTTP POST command
|
|
DIRTYCODE_API int32_t HttpManagerPost(HttpManagerRefT *pHttpManager, int32_t iHandle, const char *pUrl, const char *pData, int64_t iDataSize, uint32_t bDoPut);
|
|
|
|
// send the actual url data
|
|
DIRTYCODE_API int32_t HttpManagerSend(HttpManagerRefT *pHttpManager, int32_t iHandle, const char *pData, int32_t iDataSize);
|
|
|
|
// make an http request
|
|
#define HttpManagerRequest(_pHttpManager, _iHandle, _pUrl, _pData, _iDataSize, _eRequestType) HttpManagerRequestCb2(_pHttpManager, _iHandle, _pUrl, _pData, _iDataSize, _eRequestType, NULL, NULL, NULL, NULL)
|
|
|
|
// make an http request with write callback
|
|
#define HttpManagerRequestCb(_pHttpManager, _iHandle, _pUrl, _pData, _iDataSize, _eRequestType, _pWriteCb, _pWriteCbUserData) HttpManagerRequestCb2(_pHttpManager, _iHandle, _pUrl, _pData, _iDataSize, _eRequestType, _pWriteCb, NULL, NULL, _pWriteCbUserData)
|
|
|
|
// make an http request with write, custom header and receive header callback
|
|
DIRTYCODE_API int32_t HttpManagerRequestCb2(HttpManagerRefT *pHttpManager, int32_t iHandle, const char *pUrl, const char *pData, int64_t iDataSize, ProtoHttpRequestTypeE eRequestType, ProtoHttpWriteCbT *pWriteCb, ProtoHttpCustomHeaderCbT *pCustomHeaderCb, ProtoHttpReceiveHeaderCbT *pReceiveHeaderCb, void *pUserData);
|
|
|
|
// set base url
|
|
DIRTYCODE_API void HttpManagerSetBaseUrl(HttpManagerRefT *pHttpManager, int32_t iHandle, const char *pUrl);
|
|
|
|
// control function; functionality based on input selector (-1 to apply to all refs)
|
|
DIRTYCODE_API int32_t HttpManagerControl(HttpManagerRefT *pHttpManager, int32_t iHandle, int32_t iSelect, int32_t iValue, int32_t iValue2, void *pValue);
|
|
|
|
// return module status based on input selector
|
|
DIRTYCODE_API int32_t HttpManagerStatus(HttpManagerRefT *pHttpManager, int32_t iHandle, int32_t iSelect, void *pBuffer, int32_t iBufSize);
|
|
|
|
// give time to module to do its thing (should be called periodically to allow module to perform work)
|
|
DIRTYCODE_API void HttpManagerUpdate(HttpManagerRefT *pHttpManager);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
//@}
|
|
|
|
#endif // _protohttpmanager_h
|
|
|