static void ADC_client_send_handshake(struct ADC_client* client) { ADC_TRACE; struct adc_message* handshake = adc_msg_create(ADC_HANDSHAKE); client->callback(client, ADC_CLIENT_CONNECTED, 0); net_con_update(client->con, NET_EVENT_READ); ADC_client_send(client, handshake); ADC_client_set_state(client, ps_protocol); adc_msg_free(handshake); }
static int ADC_client_send_queue(struct ADC_client* client) { int ret = 0; while (ioq_send_get_bytes(client->send_queue)) { ret = ioq_send_send(client->send_queue, client->con); if (ret <= 0) break; } if (ret < 0) return quit_socket_error; if (ioq_send_get_bytes(client->send_queue)) { net_con_update(client->con, NET_EVENT_READ | NET_EVENT_WRITE); } else { net_con_update(client->con, NET_EVENT_READ); } return 0; }
ssize_t net_con_ssl_accept(struct net_connection* con) { struct net_ssl_openssl* handle = get_handle(con); handle->state = tls_st_accepting; ssize_t ret; ret = SSL_accept(handle->ssl); LOG_PROTO("SSL_accept() ret=%d", ret); if (ret > 0) { net_con_update(con, NET_EVENT_READ); handle->state = tls_st_connected; return ret; } return handle_openssl_error(con, ret, tls_st_accepting); }
static void ADC_client_on_connected(struct ADC_client* client) { ADC_TRACE; #ifdef SSL_SUPPORT if (client->flags & cflag_ssl) { net_con_update(client->con, NET_EVENT_READ | NET_EVENT_WRITE); client->callback(client, ADC_CLIENT_SSL_HANDSHAKE, 0); ADC_client_set_state(client, ps_conn_ssl); net_con_ssl_handshake(client->con, net_con_ssl_mode_client, g_adc_client->ctx); } else #endif ADC_client_send_handshake(client); }
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); } }
void net_con_reinitialize(struct net_connection* con, net_connection_cb callback, const void* ptr, int events) { con->callback = callback; con->ptr = (void*) ptr; net_con_update(con, events); }
void user_net_io_want_read(struct hub_user* user) { net_con_update(user->connection, NET_EVENT_READ); }
void user_net_io_want_write(struct hub_user* user) { net_con_update(user->connection, NET_EVENT_READ | NET_EVENT_WRITE); }