Exemplo n.º 1
0
Arquivo: route.c Projeto: junaidk/uhub
int route_to_user(struct hub_info* hub, struct hub_user* user, struct adc_message* msg)
{
#ifdef DEBUG_SENDQ
	char* data = strndup(msg->cache, msg->length-1);
	LOG_PROTO("send %s: \"%s\"", sid_to_string(user->id.sid), data);
	free(data);
#endif

	if (!user->connection)
		return 0;

	uhub_assert(msg->cache && *msg->cache);

	if (ioq_send_is_empty(user->send_queue) && !user_flag_get(user, flag_pipeline))
	{
		/* Perform oportunistic write */
		ioq_send_add(user->send_queue, msg);
		handle_net_write(user);
	}
	else
	{
		if (check_send_queue(hub, user, msg) >= 0)
		{
			ioq_send_add(user->send_queue, msg);
			if (!user_flag_get(user, flag_pipeline))
				user_net_io_want_write(user);
		}
	}
	return 1;
}
Exemplo n.º 2
0
int handle_net_write(struct hub_user* user)
{
    int ret = 0;
    while (hub_sendq_get_bytes(user->send_queue))
    {
        ret = hub_sendq_send(user->send_queue, user);
        if (ret <= 0)
            break;
    }

    if (ret < 0)
        return quit_socket_error;

    if (hub_sendq_get_bytes(user->send_queue))
    {
        user_net_io_want_write(user);
    }
    else
    {
        user_net_io_want_read(user);
    }
    return 0;
}