static int disconnect_conection_index(TCP_Server *TCP_server, TCP_Secure_Connection *con, uint8_t con_number) { if (con_number >= NUM_CLIENT_CONNECTIONS) return -1; if (con->connections[con_number].status) { uint32_t index = con->connections[con_number].index; uint8_t other_id = con->connections[con_number].other_id; if (con->connections[con_number].status == 2) { if (index >= TCP_server->size_accepted_connections) return -1; TCP_server->accepted_connection_array[index].connections[other_id].other_id = 0; TCP_server->accepted_connection_array[index].connections[other_id].index = 0; TCP_server->accepted_connection_array[index].connections[other_id].status = 1; //TODO: return values? send_disconnect_notification(&TCP_server->accepted_connection_array[index], other_id); } con->connections[con_number].index = 0; con->connections[con_number].other_id = 0; con->connections[con_number].status = 0; //TODO: return values? send_disconnect_notification(con, con_number); return 0; } else { return -1; } }
/* return 1 on success. * return 0 if could not send packet. * return -1 on failure (connection must be killed). */ int send_disconnect_request(TCP_Client_Connection *con, uint8_t con_id) { if (con_id >= NUM_CLIENT_CONNECTIONS) { return -1; } con->connections[con_id].status = 0; con->connections[con_id].number = 0; return send_disconnect_notification(con, con_id + NUM_RESERVED_PORTS); }