openmohaa/code/gamespy/ghttp/ghttpBuffer.h
2023-02-04 21:00:01 +01:00

170 lines
4.9 KiB
C

/*
GameSpy GHTTP SDK
Dan "Mr. Pants" Schoenblum
dan@gamespy.com
Copyright 1999-2007 GameSpy Industries, Inc
devsupport@gamespy.com
*/
#ifndef _GHTTPBUFFER_H_
#define _GHTTPBUFFER_H_
#include "ghttpMain.h"
#include "ghttpEncryption.h"
#ifdef __cplusplus
extern "C" {
#endif
// A data buffer.
/////////////////
typedef struct GHIBuffer
{
struct GHIConnection * connection; // The connection.
char * data; // The actual bytes of data.
int size; // The number of bytes allocated for data.
int len; // The number of actual data bytes filled in.
int pos; // A marker to keep track of position.
int sizeIncrement; // How much to increment the buffer by when needed.
GHTTPBool fixed; // If true, don't resize the buffer.
GHTTPBool dontFree; // Don't free the data when the buffer is cleaned up.
GHTTPBool readOnly; // Read Only, write operations will fail
} GHIBuffer;
// Initializes a buffer and allocates the initial data bytes.
// The initialSize and sizeIncrement must both be >0.
/////////////////////////////////////////////////////////////
GHTTPBool ghiInitBuffer
(
struct GHIConnection * connection, // The connection.
GHIBuffer * buffer, // The buffer to init.
int initialSize, // The initial size of the buffer.
int sizeIncrement // The size increment for the buffer.
);
// Initializes a fixed-size buffer. This will not get resized.
///////////////////////////////////////////////////////////////
GHTTPBool ghiInitFixedBuffer
(
struct GHIConnection * connection, // The connection.
GHIBuffer * buffer, // The buffer to init.
char * userBuffer, // The user-buffer to use.
int size // The size of the buffer.
);
// Initializes a read-only fixed-size buffer. This will not get resized.
///////////////////////////////////////////////////////////////
GHTTPBool ghiInitReadOnlyBuffer
(
struct GHIConnection * connection, // The connection.
GHIBuffer * buffer, // The buffer to init.
const char * userBuffer, // The user-buffer to use.
int size // The size of the buffer.
);
// Free's a buffer's allocated memory (does
// not free the actual GHIBuffer structure).
////////////////////////////////////////////
void ghiFreeBuffer
(
GHIBuffer * buffer
);
// Appends data to the buffer.
// If data is a NUL-terminated string, 0 can be
// used for dataLen to use the length of the string.
////////////////////////////////////////////////////
GHTTPBool ghiAppendDataToBuffer
(
GHIBuffer * buffer, // The buffer to append to.
const char * data, // The data to append.
int dataLen // The number of bytes of data to append, 0 for NUL-terminated string.
);
// Appends data to the buffer, wrapped in an SSL record
// If data is a NUL-terminated string, 0 can be
// used for dataLen to use the length of the string.
// Encryption has some size overhead, so call this sparingly.
////////////////////////////////////////////////////
GHTTPBool ghiEncryptDataToBuffer
(
GHIBuffer * buffer, // The buffer to append to.
const char * data, // The data to append.
int dataLen // The number of bytes of data to append, 0 for NUL-terminated string.
);
// Appends a header to the buffer.
// Both the name and value must be NUL-terminated.
// The header will be added to the buffer as:
// <name>: <value>\n
//////////////////////////////////////////////////
GHTTPBool ghiAppendHeaderToBuffer
(
GHIBuffer * buffer, // The buffer to append to.
const char * name, // The name of the header.
const char * value // The value of the header.
);
// Appends a single character to the buffer.
////////////////////////////////////////////
GHTTPBool ghiAppendCharToBuffer
(
GHIBuffer * buffer, // The buffer to append to.
int c // The char to append.
);
// Read data from a buffer
GHTTPBool ghiReadDataFromBuffer
(
GHIBuffer * bufferIn, // the GHIBuffer to read from
char bufferOut[], // the raw buffer to write to
int * len // max number of bytes to append, becomes actual length written
);
// Read a fixed number of bytes from a buffer
GHTTPBool ghiReadDataFromBufferFixed
(
GHIBuffer * bufferIn,
char bufferOut[],
int len
);
// Converts the int to a string and appends it to the buffer.
/////////////////////////////////////////////////////////////
GHTTPBool ghiAppendIntToBuffer
(
GHIBuffer * buffer, // The buffer to append to.
int i // The int to append.
);
// Resets a buffer.
// Does this by setting both len and pos to 0.
//////////////////////////////////////////////
void ghiResetBuffer
(
GHIBuffer * buffer // The buffer to reset.
);
// Sends as much buffer data as it can.
// Returns false if there was an error.
///////////////////////////////////////
GHTTPBool ghiSendBufferedData
(
struct GHIConnection * connection
);
// Increases the size of a buffer.
// This happens automatically when using the ghiAppend* functions
GHTTPBool ghiResizeBuffer
(
GHIBuffer * buffer,
int sizeIncrement
);
#ifdef __cplusplus
}
#endif
#endif