switch over all buffers to use binbufs

SVN revision: 61423
This commit is contained in:
Mike Blumenkrantz 2011-07-16 13:07:39 +00:00
parent 5fa8593191
commit 9d235b3fc7
3 changed files with 42 additions and 73 deletions

View File

@ -339,8 +339,8 @@ error:
if (svr->fd > 0)
close(svr->fd);
if (svr->write_buf)
free(svr->write_buf);
if (svr->buf)
eina_binbuf_free(svr->buf);
if (svr->ip)
eina_stringshare_del(svr->ip);
@ -607,25 +607,12 @@ ecore_con_server_send(Ecore_Con_Server *svr,
if (svr->fd_handler)
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ | ECORE_FD_WRITE);
if (svr->write_buf)
if (!svr->buf)
{
unsigned char *newbuf;
newbuf = realloc(svr->write_buf, svr->write_buf_size + size);
EINA_SAFETY_ON_NULL_RETURN_VAL(newbuf, 0);
svr->write_buf = newbuf;
memcpy(svr->write_buf + svr->write_buf_size, data, size);
svr->write_buf_size += size;
}
else
{
svr->write_buf = malloc(size);
EINA_SAFETY_ON_NULL_RETURN_VAL(svr->write_buf, 0);
svr->write_buf_size = size;
memcpy(svr->write_buf, data, size);
svr->buf = eina_binbuf_new();
EINA_SAFETY_ON_NULL_RETURN_VAL(svr->buf, 0);
}
eina_binbuf_append_length(svr->buf, data, size);
return size;
}
@ -722,26 +709,12 @@ ecore_con_client_send(Ecore_Con_Client *cl,
if (cl->host_server && ((cl->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP))
sendto(cl->host_server->fd, data, size, 0, (struct sockaddr *)cl->client_addr,
cl->client_addr_len);
else if (cl->buf)
else if (!cl->buf)
{
unsigned char *newbuf;
newbuf = realloc(cl->buf, cl->buf_size + size);
EINA_SAFETY_ON_NULL_RETURN_VAL(newbuf, 0);
cl->buf = newbuf;
memcpy(cl->buf + cl->buf_size, data, size);
cl->buf_size += size;
}
else
{
cl->buf = malloc(size);
cl->buf = eina_binbuf_new();
EINA_SAFETY_ON_NULL_RETURN_VAL(cl->buf, 0);
cl->buf_size = size;
memcpy(cl->buf, data, size);
}
eina_binbuf_append_length(cl->buf, data, size);
return size;
}
@ -1097,7 +1070,7 @@ _ecore_con_server_free(Ecore_Con_Server *svr)
ecore_con_info_data_clear(svr->infos->data);
svr->infos = eina_list_remove_list(svr->infos, svr->infos);
}
if ((!svr->write_buf) && svr->delete_me && (!svr->dead) && (svr->event_count < 1))
if ((!svr->buf) && svr->delete_me && (!svr->dead) && (svr->event_count < 1))
{
/* this is a catch-all for cases when a server is not properly killed. */
svr->dead = EINA_TRUE;
@ -1109,7 +1082,7 @@ _ecore_con_server_free(Ecore_Con_Server *svr)
return;
ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE);
t_start = ecore_time_get();
while ((svr->write_buf) && (!svr->dead))
while (svr->buf && (!svr->dead))
{
_ecore_con_server_flush(svr);
t = ecore_time_get();
@ -1127,8 +1100,8 @@ _ecore_con_server_free(Ecore_Con_Server *svr)
ecore_con_local_win32_server_del(svr);
#endif
if (svr->write_buf)
free(svr->write_buf);
if (svr->buf)
eina_binbuf_free(svr->buf);
EINA_LIST_FREE(svr->clients, cl)
_ecore_con_client_free(cl);
@ -1713,7 +1686,7 @@ svr_try_connect_plain(Ecore_Con_Server *svr)
ecore_con_event_server_add(svr);
}
if (svr->fd_handler && (!svr->write_buf))
if (svr->fd_handler && (!svr->buf))
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ);
if (!svr->dead)
@ -2161,13 +2134,13 @@ _ecore_con_server_flush(Ecore_Con_Server *svr)
return;
#endif
if (!svr->write_buf && svr->fd_handler)
if ((!svr->buf) && svr->fd_handler)
{
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ);
return;
}
num = svr->write_buf_size - svr->write_buf_offset;
num = eina_binbuf_length_get(svr->buf) - svr->write_buf_offset;
/* check whether we need to write anything at all.
* we must not write zero bytes with SSL_write() since it
@ -2188,9 +2161,9 @@ _ecore_con_server_flush(Ecore_Con_Server *svr)
}
if (!(svr->type & ECORE_CON_SSL))
count = write(svr->fd, svr->write_buf + svr->write_buf_offset, num);
count = write(svr->fd, eina_binbuf_string_get(svr->buf) + svr->write_buf_offset, num);
else
count = ecore_con_ssl_server_write(svr, svr->write_buf + svr->write_buf_offset, num);
count = ecore_con_ssl_server_write(svr, eina_binbuf_string_get(svr->buf) + svr->write_buf_offset, num);
if (count < 0)
{
@ -2203,12 +2176,11 @@ _ecore_con_server_flush(Ecore_Con_Server *svr)
}
svr->write_buf_offset += count;
if (svr->write_buf_offset >= svr->write_buf_size)
if (svr->write_buf_offset >= eina_binbuf_length_get(svr->buf))
{
svr->write_buf_size = 0;
svr->write_buf_offset = 0;
free(svr->write_buf);
svr->write_buf = NULL;
eina_binbuf_free(svr->buf);
svr->buf = NULL;
if (svr->fd_handler)
ecore_main_fd_handler_active_set(svr->fd_handler, ECORE_FD_READ);
}
@ -2242,12 +2214,12 @@ _ecore_con_client_flush(Ecore_Con_Client *cl)
if (!count)
{
num = cl->buf_size - cl->buf_offset;
num = eina_binbuf_length_get(cl->buf) - cl->buf_offset;
if (num <= 0) return;
if (!(cl->host_server->type & ECORE_CON_SSL) || (!cl->upgrade))
count = write(cl->fd, cl->buf + cl->buf_offset, num);
count = write(cl->fd, eina_binbuf_string_get(cl->buf) + cl->buf_offset, num);
else
count = ecore_con_ssl_client_write(cl, cl->buf + cl->buf_offset, num);
count = ecore_con_ssl_client_write(cl, eina_binbuf_string_get(cl->buf) + cl->buf_offset, num);
}
if (count < 0)
@ -2268,11 +2240,10 @@ _ecore_con_client_flush(Ecore_Con_Client *cl)
}
cl->buf_offset += count;
if (cl->buf_offset >= cl->buf_size)
if (cl->buf_offset >= eina_binbuf_length_get(cl->buf))
{
cl->buf_size = 0;
cl->buf_offset = 0;
free(cl->buf);
eina_binbuf_free(cl->buf);
cl->buf = NULL;
if (cl->fd_handler)
ecore_main_fd_handler_active_set(cl->fd_handler, ECORE_FD_READ);

View File

@ -89,9 +89,8 @@ struct _Ecore_Con_Client
Ecore_Con_Server *host_server;
void *data;
Ecore_Fd_Handler *fd_handler;
int buf_size;
int buf_offset;
unsigned char *buf;
unsigned int buf_offset;
Eina_Binbuf *buf;
const char *ip;
int event_count;
struct sockaddr *client_addr;
@ -125,9 +124,8 @@ struct _Ecore_Con_Server
Ecore_Fd_Handler *fd_handler;
Eina_List *clients;
unsigned int client_count;
int write_buf_size;
int write_buf_offset;
unsigned char *write_buf;
Eina_Binbuf *buf;
unsigned int write_buf_offset;
Eina_List *infos;
int event_count;
int client_limit;
@ -283,7 +281,7 @@ int ecore_con_ssl_server_read(Ecore_Con_Server *svr,
unsigned char *buf,
int size);
int ecore_con_ssl_server_write(Ecore_Con_Server *svr,
unsigned char *buf,
const unsigned char *buf,
int size);
Ecore_Con_Ssl_Error ecore_con_ssl_client_init(Ecore_Con_Client *svr);
Ecore_Con_Ssl_Error ecore_con_ssl_client_shutdown(Ecore_Con_Client *svr);
@ -291,7 +289,7 @@ int ecore_con_ssl_client_read(Ecore_Con_Client *svr,
unsigned char *buf,
int size);
int ecore_con_ssl_client_write(Ecore_Con_Client *svr,
unsigned char *buf,
const unsigned char *buf,
int size);
int ecore_con_info_get(Ecore_Con_Server *svr,

View File

@ -188,14 +188,14 @@ static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_prepare) (Ecore_Con_
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_init) (Ecore_Con_Server * svr);
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_server_shutdown) (Ecore_Con_Server *svr);
static int SSL_SUFFIX(_ecore_con_ssl_server_read) (Ecore_Con_Server *svr, unsigned char *buf, int size);
static int SSL_SUFFIX(_ecore_con_ssl_server_write) (Ecore_Con_Server *svr, unsigned char *buf, int size);
static int SSL_SUFFIX(_ecore_con_ssl_server_write) (Ecore_Con_Server *svr, const unsigned char *buf, int size);
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_client_init) (Ecore_Con_Client * cl);
static Ecore_Con_Ssl_Error SSL_SUFFIX(_ecore_con_ssl_client_shutdown) (Ecore_Con_Client *cl);
static int SSL_SUFFIX(_ecore_con_ssl_client_read) (Ecore_Con_Client * cl,
unsigned char *buf, int size);
static int SSL_SUFFIX(_ecore_con_ssl_client_write) (Ecore_Con_Client * cl,
unsigned char *buf, int size);
const unsigned char *buf, int size);
/*
* General SSL API
@ -260,7 +260,7 @@ ecore_con_ssl_server_read(Ecore_Con_Server *svr,
int
ecore_con_ssl_server_write(Ecore_Con_Server *svr,
unsigned char *buf,
const unsigned char *buf,
int size)
{
return SSL_SUFFIX(_ecore_con_ssl_server_write) (svr, buf, size);
@ -292,7 +292,7 @@ ecore_con_ssl_client_read(Ecore_Con_Client *cl,
int
ecore_con_ssl_client_write(Ecore_Con_Client *cl,
unsigned char *buf,
const unsigned char *buf,
int size)
{
return SSL_SUFFIX(_ecore_con_ssl_client_write) (cl, buf, size);
@ -884,7 +884,7 @@ _ecore_con_ssl_server_read_gnutls(Ecore_Con_Server *svr,
static int
_ecore_con_ssl_server_write_gnutls(Ecore_Con_Server *svr,
unsigned char *buf,
const unsigned char *buf,
int size)
{
int num;
@ -1109,7 +1109,7 @@ _ecore_con_ssl_client_read_gnutls(Ecore_Con_Client *cl,
static int
_ecore_con_ssl_client_write_gnutls(Ecore_Con_Client *cl,
unsigned char *buf,
const unsigned char *buf,
int size)
{
int num;
@ -1475,7 +1475,7 @@ _ecore_con_ssl_server_read_openssl(Ecore_Con_Server *svr,
static int
_ecore_con_ssl_server_write_openssl(Ecore_Con_Server *svr,
unsigned char *buf,
const unsigned char *buf,
int size)
{
int num;
@ -1628,7 +1628,7 @@ _ecore_con_ssl_client_read_openssl(Ecore_Con_Client *cl,
static int
_ecore_con_ssl_client_write_openssl(Ecore_Con_Client *cl,
unsigned char *buf,
const unsigned char *buf,
int size)
{
int num;
@ -1736,7 +1736,7 @@ _ecore_con_ssl_server_read_none(Ecore_Con_Server *svr __UNUSED__,
static int
_ecore_con_ssl_server_write_none(Ecore_Con_Server *svr __UNUSED__,
unsigned char *buf __UNUSED__,
const unsigned char *buf __UNUSED__,
int size __UNUSED__)
{
return -1;
@ -1770,7 +1770,7 @@ _ecore_con_ssl_client_read_none(Ecore_Con_Client *cl __UNUSED__,
static int
_ecore_con_ssl_client_write_none(Ecore_Con_Client *cl __UNUSED__,
unsigned char *buf __UNUSED__,
const unsigned char *buf __UNUSED__,
int size __UNUSED__)
{
return -1;