./ MultiCS.r82 / httpbuffer.c
// TCP DATA
#define MAX_BUFFERSIZE 500
char tcp_buffer[MAX_BUFFERSIZE];
int tcp_bufindex; // current pos.
int tcp_bufsize; // allocated size
struct tcp_buffer_data
{
char data[MAX_BUFFERSIZE];
int index; // current pos.
int size; // allocated size
};
void tcp_init(struct tcp_buffer_data *buf)
{
buf->size = sizeof(buf->data);
buf->index = 0;
}
void tcp_flush(struct tcp_buffer_data *buf, int sock)
{
if (sock<=0) return;
if (buf->index>0) {
send(sock,buf->data,buf->index,MSG_NOSIGNAL|MSG_WAITALL);
buf->index=0;
}
}
void tcp_write(struct tcp_buffer_data *buf, int sock, const char *data, int size )
{
int datapos=0;
int bytes=0;
if (sock<=0) return;
while ( buf->index+size>=buf->size ) {
bytes = buf->size - buf->index;
memcpy( &buf->data[buf->index], &data[datapos], bytes);
datapos += bytes;
size -= bytes;
buf->index += bytes;
// send buffer
tcp_flush(buf, sock);
}
if (size>0) {
memcpy( &buf->data[buf->index], &data[datapos], size);
buf->index += size;
}
}
void tcp_writestr(struct tcp_buffer_data *buf, int sock, const char *data )
{
tcp_write( buf, sock, data, strlen(data) );
}