Renamed the hub_sendq and hub_recvq to ioq_send and ioq_recv.
This commit is contained in:
parent
35bfefa717
commit
fc52f0e030
|
@ -142,8 +142,8 @@ libuhub_SOURCES := \
|
||||||
src/core/eventqueue.c \
|
src/core/eventqueue.c \
|
||||||
src/core/hub.c \
|
src/core/hub.c \
|
||||||
src/core/hubevent.c \
|
src/core/hubevent.c \
|
||||||
src/core/hubio.c \
|
|
||||||
src/core/inf.c \
|
src/core/inf.c \
|
||||||
|
src/core/ioqueue.c \
|
||||||
src/core/netevent.c \
|
src/core/netevent.c \
|
||||||
src/core/probe.c \
|
src/core/probe.c \
|
||||||
src/core/route.c \
|
src/core/route.c \
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* uhub - A tiny ADC p2p connection hub
|
* uhub - A tiny ADC p2p connection hub
|
||||||
* Copyright (C) 2007-2010, Jan Vidar Krey
|
* Copyright (C) 2007-2012, Jan Vidar Krey
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,7 +18,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "uhub.h"
|
#include "uhub.h"
|
||||||
#include "hubio.h"
|
|
||||||
|
|
||||||
#ifdef DEBUG_SENDQ
|
#ifdef DEBUG_SENDQ
|
||||||
static void debug_msg(const char* prefix, struct adc_message* msg)
|
static void debug_msg(const char* prefix, struct adc_message* msg)
|
||||||
|
@ -35,13 +34,13 @@ static void debug_msg(const char* prefix, struct adc_message* msg)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct hub_recvq* hub_recvq_create()
|
struct ioq_recv* ioq_recv_create()
|
||||||
{
|
{
|
||||||
struct hub_recvq* q = hub_malloc_zero(sizeof(struct hub_recvq));
|
struct ioq_recv* q = hub_malloc_zero(sizeof(struct ioq_recv));
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hub_recvq_destroy(struct hub_recvq* q)
|
void ioq_recv_destroy(struct ioq_recv* q)
|
||||||
{
|
{
|
||||||
if (q)
|
if (q)
|
||||||
{
|
{
|
||||||
|
@ -50,7 +49,7 @@ void hub_recvq_destroy(struct hub_recvq* q)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t hub_recvq_get(struct hub_recvq* q, void* buf, size_t bufsize)
|
size_t ioq_recv_get(struct ioq_recv* q, void* buf, size_t bufsize)
|
||||||
{
|
{
|
||||||
uhub_assert(bufsize >= q->size);
|
uhub_assert(bufsize >= q->size);
|
||||||
if (q->size)
|
if (q->size)
|
||||||
|
@ -65,7 +64,7 @@ size_t hub_recvq_get(struct hub_recvq* q, void* buf, size_t bufsize)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t hub_recvq_set(struct hub_recvq* q, void* buf, size_t bufsize)
|
size_t ioq_recv_set(struct ioq_recv* q, void* buf, size_t bufsize)
|
||||||
{
|
{
|
||||||
if (q->buf)
|
if (q->buf)
|
||||||
{
|
{
|
||||||
|
@ -89,9 +88,9 @@ size_t hub_recvq_set(struct hub_recvq* q, void* buf, size_t bufsize)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct hub_sendq* hub_sendq_create()
|
struct ioq_send* ioq_send_create()
|
||||||
{
|
{
|
||||||
struct hub_sendq* q = hub_malloc_zero(sizeof(struct hub_sendq));
|
struct ioq_send* q = hub_malloc_zero(sizeof(struct ioq_send));
|
||||||
if (!q)
|
if (!q)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -110,7 +109,7 @@ static void clear_send_queue_callback(void* ptr)
|
||||||
adc_msg_free((struct adc_message*) ptr);
|
adc_msg_free((struct adc_message*) ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hub_sendq_destroy(struct hub_sendq* q)
|
void ioq_send_destroy(struct ioq_send* q)
|
||||||
{
|
{
|
||||||
if (q)
|
if (q)
|
||||||
{
|
{
|
||||||
|
@ -120,21 +119,21 @@ void hub_sendq_destroy(struct hub_sendq* q)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void hub_sendq_add(struct hub_sendq* q, struct adc_message* msg_)
|
void ioq_send_add(struct ioq_send* q, struct adc_message* msg_)
|
||||||
{
|
{
|
||||||
struct adc_message* msg = adc_msg_incref(msg_);
|
struct adc_message* msg = adc_msg_incref(msg_);
|
||||||
#ifdef DEBUG_SENDQ
|
#ifdef DEBUG_SENDQ
|
||||||
debug_msg("hub_sendq_add", msg);
|
debug_msg("ioq_send_add", msg);
|
||||||
#endif
|
#endif
|
||||||
uhub_assert(msg->cache && *msg->cache);
|
uhub_assert(msg->cache && *msg->cache);
|
||||||
list_append(q->queue, msg);
|
list_append(q->queue, msg);
|
||||||
q->size += msg->length;
|
q->size += msg->length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hub_sendq_remove(struct hub_sendq* q, struct adc_message* msg)
|
void ioq_send_remove(struct ioq_send* q, struct adc_message* msg)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_SENDQ
|
#ifdef DEBUG_SENDQ
|
||||||
debug_msg("hub_sendq_remove", msg);
|
debug_msg("ioq_send_remove", msg);
|
||||||
#endif
|
#endif
|
||||||
list_remove(q->queue, msg);
|
list_remove(q->queue, msg);
|
||||||
q->size -= msg->length;
|
q->size -= msg->length;
|
||||||
|
@ -142,7 +141,7 @@ void hub_sendq_remove(struct hub_sendq* q, struct adc_message* msg)
|
||||||
q->offset = 0;
|
q->offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hub_sendq_send(struct hub_sendq* q, struct hub_user* user)
|
int ioq_send_send(struct ioq_send* q, struct hub_user* user)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct adc_message* msg = list_get_first(q->queue);
|
struct adc_message* msg = list_get_first(q->queue);
|
||||||
|
@ -156,18 +155,18 @@ int hub_sendq_send(struct hub_sendq* q, struct hub_user* user)
|
||||||
if (msg->length - q->offset > 0)
|
if (msg->length - q->offset > 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
hub_sendq_remove(q, msg);
|
ioq_send_remove(q, msg);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hub_sendq_is_empty(struct hub_sendq* q)
|
int ioq_send_is_empty(struct ioq_send* q)
|
||||||
{
|
{
|
||||||
return (q->size - q->offset) == 0;
|
return (q->size - q->offset) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t hub_sendq_get_bytes(struct hub_sendq* q)
|
size_t ioq_send_get_bytes(struct ioq_send* q)
|
||||||
{
|
{
|
||||||
return q->size - q->offset;
|
return q->size - q->offset;
|
||||||
}
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* uhub - A tiny ADC p2p connection hub
|
* uhub - A tiny ADC p2p connection hub
|
||||||
* Copyright (C) 2007-2010, Jan Vidar Krey
|
* Copyright (C) 2007-2012, Jan Vidar Krey
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -17,25 +17,25 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HAVE_UHUB_HUB_IO_H
|
#ifndef HAVE_UHUB_IO_QUEUE_H
|
||||||
#define HAVE_UHUB_HUB_IO_H
|
#define HAVE_UHUB_IO_QUEUE_H
|
||||||
|
|
||||||
struct adc_message;
|
struct adc_message;
|
||||||
struct linked_list;
|
struct linked_list;
|
||||||
typedef int (*hub_recvq_write)(void* desc, const void* buf, size_t len);
|
typedef int (*ioq_write)(void* desc, const void* buf, size_t len);
|
||||||
typedef int (*hub_recvq_read)(void* desc, void* buf, size_t len);
|
typedef int (*ioq_read)(void* desc, void* buf, size_t len);
|
||||||
|
|
||||||
struct hub_sendq
|
struct ioq_send
|
||||||
{
|
{
|
||||||
size_t size; /** Size of send queue (in bytes, not messages) */
|
size_t size; /** Size of send queue (in bytes, not messages) */
|
||||||
size_t offset; /** Queue byte offset in the first message. Should be 0 unless a partial write. */
|
size_t offset; /** Queue byte offset in the first message. Should be 0 unless a partial write. */
|
||||||
#ifdef SSL_SUPPORT
|
#ifdef SSL_SUPPORT
|
||||||
size_t last_send; /** When using SSL, one have to send the exact same buffer and length if a write cannot complete. */
|
size_t last_send; /** When using SSL, one have to send the exact same buffer and length if a write cannot complete. */
|
||||||
#endif
|
#endif
|
||||||
struct linked_list* queue; /** List of queued messages */
|
struct linked_list* queue; /** List of queued messages (struct adc_message) */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hub_recvq
|
struct ioq_recv
|
||||||
{
|
{
|
||||||
char* buf;
|
char* buf;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
@ -44,63 +44,63 @@ struct hub_recvq
|
||||||
/**
|
/**
|
||||||
* Create a send queue
|
* Create a send queue
|
||||||
*/
|
*/
|
||||||
extern struct hub_sendq* hub_sendq_create();
|
extern struct ioq_send* ioq_send_create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy a send queue, and delete any queued messages.
|
* Destroy a send queue, and delete any queued messages.
|
||||||
*/
|
*/
|
||||||
extern void hub_sendq_destroy(struct hub_sendq*);
|
extern void ioq_send_destroy(struct ioq_send*);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a message to the send queue.
|
* Add a message to the send queue.
|
||||||
*/
|
*/
|
||||||
extern void hub_sendq_add(struct hub_sendq*, struct adc_message* msg);
|
extern void ioq_send_add(struct ioq_send*, struct adc_message* msg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process the send queue, and send as many messages as possible.
|
* Process the send queue, and send as many messages as possible.
|
||||||
* @returns -1 on error, 0 if unable to send more, 1 if more can be sent.
|
* @returns -1 on error, 0 if unable to send more, 1 if more can be sent.
|
||||||
*/
|
*/
|
||||||
extern int hub_sendq_send(struct hub_sendq*, struct hub_user*);
|
extern int ioq_send_send(struct ioq_send*, struct hub_user*);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns 1 if send queue is empty, 0 otherwise.
|
* @returns 1 if send queue is empty, 0 otherwise.
|
||||||
*/
|
*/
|
||||||
extern int hub_sendq_is_empty(struct hub_sendq*);
|
extern int ioq_send_is_empty(struct ioq_send*);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns the number of bytes remaining to be sent in the queue.
|
* @returns the number of bytes remaining to be sent in the queue.
|
||||||
*/
|
*/
|
||||||
extern size_t hub_sendq_get_bytes(struct hub_sendq*);
|
extern size_t ioq_send_get_bytes(struct ioq_send*);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a receive queue.
|
* Create a receive queue.
|
||||||
*/
|
*/
|
||||||
extern struct hub_recvq* hub_recvq_create();
|
extern struct ioq_recv* ioq_recv_create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy a receive queue.
|
* Destroy a receive queue.
|
||||||
*/
|
*/
|
||||||
extern void hub_recvq_destroy(struct hub_recvq*);
|
extern void ioq_recv_destroy(struct ioq_recv*);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the buffer, copies it into buf and deallocates it.
|
* Gets the buffer, copies it into buf and deallocates it.
|
||||||
* NOTE: bufsize *MUST* be larger than the buffer, otherwise it asserts.
|
* NOTE: bufsize *MUST* be larger than the buffer, otherwise it asserts.
|
||||||
* @return the number of bytes copied into buf.
|
* @return the number of bytes copied into buf.
|
||||||
*/
|
*/
|
||||||
extern size_t hub_recvq_get(struct hub_recvq*, void* buf, size_t bufsize);
|
extern size_t ioq_recv_get(struct ioq_recv*, void* buf, size_t bufsize);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the buffer
|
* Sets the buffer
|
||||||
*/
|
*/
|
||||||
extern size_t hub_recvq_set(struct hub_recvq*, void* buf, size_t bufsize);
|
extern size_t ioq_recv_set(struct ioq_recv*, void* buf, size_t bufsize);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 1 if size is zero, 0 otherwise.
|
* @return 1 if size is zero, 0 otherwise.
|
||||||
*/
|
*/
|
||||||
extern int hub_recvq_is_empty(struct hub_recvq* buf);
|
extern int ioq_recv_is_empty(struct ioq_recv* buf);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_UHUB_HUB_IO_H */
|
#endif /* HAVE_UHUB_IO_QUEUE_H */
|
|
@ -18,14 +18,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <uhub.h>
|
#include <uhub.h>
|
||||||
#include "hubio.h"
|
#include "ioqueue.h"
|
||||||
#include "probe.h"
|
#include "probe.h"
|
||||||
|
|
||||||
int handle_net_read(struct hub_user* user)
|
int handle_net_read(struct hub_user* user)
|
||||||
{
|
{
|
||||||
static char buf[MAX_RECV_BUF];
|
static char buf[MAX_RECV_BUF];
|
||||||
struct hub_recvq* q = user->recv_queue;
|
struct ioq_recv* q = user->recv_queue;
|
||||||
size_t buf_size = hub_recvq_get(q, buf, MAX_RECV_BUF);
|
size_t buf_size = ioq_recv_get(q, buf, MAX_RECV_BUF);
|
||||||
ssize_t size;
|
ssize_t size;
|
||||||
|
|
||||||
if (user_flag_get(user, flag_maxbuf))
|
if (user_flag_get(user, flag_maxbuf))
|
||||||
|
@ -87,18 +87,18 @@ int handle_net_read(struct hub_user* user)
|
||||||
{
|
{
|
||||||
if (remaining < (size_t) user->hub->config->max_recv_buffer)
|
if (remaining < (size_t) user->hub->config->max_recv_buffer)
|
||||||
{
|
{
|
||||||
hub_recvq_set(q, lastPos ? lastPos : buf, remaining);
|
ioq_recv_set(q, lastPos ? lastPos : buf, remaining);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hub_recvq_set(q, 0, 0);
|
ioq_recv_set(q, 0, 0);
|
||||||
user_flag_set(user, flag_maxbuf);
|
user_flag_set(user, flag_maxbuf);
|
||||||
LOG_WARN("Received message past max_recv_buffer, dropping message.");
|
LOG_WARN("Received message past max_recv_buffer, dropping message.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hub_recvq_set(q, 0, 0);
|
ioq_recv_set(q, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -107,9 +107,9 @@ int handle_net_read(struct hub_user* user)
|
||||||
int handle_net_write(struct hub_user* user)
|
int handle_net_write(struct hub_user* user)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
while (hub_sendq_get_bytes(user->send_queue))
|
while (ioq_send_get_bytes(user->send_queue))
|
||||||
{
|
{
|
||||||
ret = hub_sendq_send(user->send_queue, user);
|
ret = ioq_send_send(user->send_queue, user);
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ int handle_net_write(struct hub_user* user)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return quit_socket_error;
|
return quit_socket_error;
|
||||||
|
|
||||||
if (hub_sendq_get_bytes(user->send_queue))
|
if (ioq_send_get_bytes(user->send_queue))
|
||||||
{
|
{
|
||||||
user_net_io_want_write(user);
|
user_net_io_want_write(user);
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,17 +108,17 @@ int route_to_user(struct hub_info* hub, struct hub_user* user, struct adc_messag
|
||||||
|
|
||||||
uhub_assert(msg->cache && *msg->cache);
|
uhub_assert(msg->cache && *msg->cache);
|
||||||
|
|
||||||
if (hub_sendq_is_empty(user->send_queue) && !user_flag_get(user, flag_pipeline))
|
if (ioq_send_is_empty(user->send_queue) && !user_flag_get(user, flag_pipeline))
|
||||||
{
|
{
|
||||||
/* Perform oportunistic write */
|
/* Perform oportunistic write */
|
||||||
hub_sendq_add(user->send_queue, msg);
|
ioq_send_add(user->send_queue, msg);
|
||||||
handle_net_write(user);
|
handle_net_write(user);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (check_send_queue(hub, user, msg) >= 0)
|
if (check_send_queue(hub, user, msg) >= 0)
|
||||||
{
|
{
|
||||||
hub_sendq_add(user->send_queue, msg);
|
ioq_send_add(user->send_queue, msg);
|
||||||
if (!user_flag_get(user, flag_pipeline))
|
if (!user_flag_get(user, flag_pipeline))
|
||||||
user_net_io_want_write(user);
|
user_net_io_want_write(user);
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ int route_to_user(struct hub_info* hub, struct hub_user* user, struct adc_messag
|
||||||
|
|
||||||
int route_flush_pipeline(struct hub_info* hub, struct hub_user* u)
|
int route_flush_pipeline(struct hub_info* hub, struct hub_user* u)
|
||||||
{
|
{
|
||||||
if (hub_sendq_is_empty(u->send_queue))
|
if (ioq_send_is_empty(u->send_queue))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
handle_net_write(u);
|
handle_net_write(u);
|
||||||
|
|
|
@ -46,8 +46,8 @@ struct hub_user* user_create(struct hub_info* hub, struct net_connection* con, s
|
||||||
if (user == NULL)
|
if (user == NULL)
|
||||||
return NULL; /* OOM */
|
return NULL; /* OOM */
|
||||||
|
|
||||||
user->send_queue = hub_sendq_create();
|
user->send_queue = ioq_send_create();
|
||||||
user->recv_queue = hub_recvq_create();
|
user->recv_queue = ioq_recv_create();
|
||||||
|
|
||||||
user->connection = con;
|
user->connection = con;
|
||||||
net_con_reinitialize(user->connection, net_event, user, NET_EVENT_READ);
|
net_con_reinitialize(user->connection, net_event, user, NET_EVENT_READ);
|
||||||
|
@ -70,8 +70,8 @@ void user_destroy(struct hub_user* user)
|
||||||
{
|
{
|
||||||
LOG_TRACE("user_destroy(), user=%p", user);
|
LOG_TRACE("user_destroy(), user=%p", user);
|
||||||
|
|
||||||
hub_recvq_destroy(user->recv_queue);
|
ioq_recv_destroy(user->recv_queue);
|
||||||
hub_sendq_destroy(user->send_queue);
|
ioq_send_destroy(user->send_queue);
|
||||||
|
|
||||||
if (user->connection)
|
if (user->connection)
|
||||||
{
|
{
|
||||||
|
|
|
@ -113,8 +113,8 @@ struct hub_user
|
||||||
struct linked_list* feature_cast; /** Features supported by feature cast */
|
struct linked_list* feature_cast; /** Features supported by feature cast */
|
||||||
struct adc_message* info; /** ADC 'INF' message (broadcasted to everyone joining the hub) */
|
struct adc_message* info; /** ADC 'INF' message (broadcasted to everyone joining the hub) */
|
||||||
struct hub_info* hub; /** The hub instance this user belong to */
|
struct hub_info* hub; /** The hub instance this user belong to */
|
||||||
struct hub_recvq* recv_queue;
|
struct ioq_recv* recv_queue;
|
||||||
struct hub_sendq* send_queue;
|
struct ioq_send* send_queue;
|
||||||
struct net_connection* connection; /** Connection data */
|
struct net_connection* connection; /** Connection data */
|
||||||
struct hub_user_limits limits; /** Data used for limitation */
|
struct hub_user_limits limits; /** Data used for limitation */
|
||||||
enum user_quit_reason quit_reason; /** Quit reason (see user_quit_reason) */
|
enum user_quit_reason quit_reason; /** Quit reason (see user_quit_reason) */
|
||||||
|
|
|
@ -82,7 +82,7 @@ extern "C" {
|
||||||
#include "core/eventid.h"
|
#include "core/eventid.h"
|
||||||
#include "core/eventqueue.h"
|
#include "core/eventqueue.h"
|
||||||
#include "core/netevent.h"
|
#include "core/netevent.h"
|
||||||
#include "core/hubio.h"
|
#include "core/ioqueue.h"
|
||||||
#include "core/user.h"
|
#include "core/user.h"
|
||||||
#include "core/usermanager.h"
|
#include "core/usermanager.h"
|
||||||
#include "core/route.h"
|
#include "core/route.h"
|
||||||
|
|
Loading…
Reference in New Issue