void unabto_tcp_fallback_write_ready(nabto_connect* con) { if (con->state != CS_IDLE) { unabto_tcp_fallback_state st = con->tcpFallbackConnectionState; unabto_tcp_fallback_connection* fbConn = &fbConns[nabto_connection_index(con)]; if (st > UTFS_IDLE && st < UTFS_CLOSED && fbConn->socket != INVALID_SOCKET) { if (st == UTFS_CONNECTING) { unabto_tcp_fallback_handle_connect(con); } if (st >= UTFS_CONNECTED) { bool status; do { status = unabto_tcp_fallback_handle_write(con); } while (status); } } } }
unabto_tcp_fallback_error unabto_tcp_fallback_write(nabto_connect* con, uint8_t* buffer, size_t bufferLength) { unabto_tcp_fallback_connection* fbConn = &fbConns[nabto_connection_index(con)]; unabto_tcp_fallback_error status = UTFE_OK; if (fbConn->sendBufferLength == 0) { memcpy(fbConn->sendBuffer, buffer, bufferLength); fbConn->sendBufferLength = bufferLength; fbConn->sendBufferSent = 0; unabto_tcp_fallback_handle_write(con); status = UTFE_OK; NABTO_LOG_TRACE((PRI_tcp_fb "Succesful queue of tcp fallback packet.", TCP_FB_ARGS(con))); } else { NABTO_LOG_TRACE((PRI_tcp_fb "Could not enqueue tcp fallback packet.", TCP_FB_ARGS(con))); status = UTFE_QUEUE_FULL; } return status; }
void unabto_tcp_fallback_select_write_sockets(fd_set* writeFds) { int i; for (i = 0; i < NABTO_CONNECTIONS_SIZE; i++) { nabto_connect* con = &connections[i]; if (con->state != CS_IDLE) { unabto_tcp_fallback_state st = con->tcpFallbackConnectionState; unabto_tcp_fallback_connection* fbConn = &fbConns[nabto_connection_index(con)]; if (st > UTFS_IDLE && st < UTFS_CLOSED && fbConn->socket != INVALID_SOCKET) { if (FD_ISSET(fbConn->socket, writeFds)) { if (st == UTFS_CONNECTING) { unabto_tcp_fallback_handle_connect(con); } else if (st >= UTFS_CONNECTED) { unabto_tcp_fallback_handle_write(con); } } } } } }