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; }
int route_flush_pipeline(struct hub_info* hub, struct hub_user* u) { if (ioq_send_is_empty(u->send_queue)) return 0; handle_net_write(u); user_flag_unset(u, flag_pipeline); return 1; }
void ADC_client_send(struct ADC_client* client, struct adc_message* msg) { ADC_TRACE; uhub_assert(client->con != NULL); uhub_assert(msg->cache && *msg->cache); if (ioq_send_is_empty(client->send_queue) && !(client->flags & cflag_pipe)) { /* Perform oportunistic write */ ioq_send_add(client->send_queue, msg); ADC_client_send_queue(client); } else { ioq_send_add(client->send_queue, msg); if (!(client->flags & cflag_pipe)) net_con_update(client->con, NET_EVENT_READ | NET_EVENT_WRITE); } }