// Setup a new connection void httpd_init_state(chanend tcp_svr, xtcp_connection_t *conn) { int i; // Try and find an empty connection slot for (i=0;i<NUM_HTTPD_CONNECTIONS;i++) { if (!connection_states[i].active) break; } // If no free connection slots were found, abort the connection if ( i == NUM_HTTPD_CONNECTIONS ) { xtcp_abort(tcp_svr, conn); } // Otherwise, assign the connection to a slot // else { connection_states[i].active = 1; connection_states[i].conn_id = conn->id; connection_states[i].dptr = NULL; xtcp_set_connection_appstate( tcp_svr, conn, (xtcp_appstate_t) &connection_states[i]); } }
void httpd_init_state(chanend tcp_svr, xtcp_connection_t *conn) { int i; for (i=0;i<NUM_HTTPD_CONNECTIONS;i++) { if (!connection_states[i].active) break; } if (i==NUM_HTTPD_CONNECTIONS) { printstr("Too many httpd connections!"); xtcp_close(tcp_svr, conn); } else { // printstr("open "); //printintln(i); connection_states[i].active = 1; connection_states[i].conn_id = conn->id; connection_states[i].pss.cmdptr = 0; connection_states[i].pss.dptr = 0; connection_states[i].pss.saved_dptr = 0; connection_states[i].pss.bfcount = 0; connection_states[i].saved_pss = connection_states[i].pss; xtcp_set_connection_appstate(tcp_svr, conn, (xtcp_appstate_t) &connection_states[i]); } return; }
/* * This associates some buffer state with a conenction. It uses three * API calls. * * xtcp_set_connection_appstate - for attaching a piece of user state * to a xtcp connection. * * xtcp_buffered_set_rx_buffer - to associate the rx memory buffer with a * buffered connection. * * xtcp_buffered_set_tx_buffer - to associate the tx memory buffer with a * buffered connection. */ static void demo_protocol_init_state(chanend tcp_svr, xtcp_connection_t *conn, int timestamp) { int i; for (i = 0; i < NUM_DEMO_PROTOCOL_CONNECTIONS; i++) { if (!connection_states[i].active) break; } if (i == NUM_DEMO_PROTOCOL_CONNECTIONS) xtcp_abort(tcp_svr, conn); else { connection_states[i].active = 1; connection_states[i].got_header = 0; connection_states[i].last_used = timestamp; connection_states[i].conn_id = conn->id; xtcp_set_connection_appstate(tcp_svr, conn, (xtcp_appstate_t) &connection_states[i]); xtcp_buffered_set_rx_buffer(tcp_svr, conn, &connection_states[i].bufinfo, connection_states[i].inbuf, DEMO_PROTOCOL_RXBUF_LEN); xtcp_buffered_set_tx_buffer(tcp_svr, conn, &connection_states[i].bufinfo, connection_states[i].outbuf, DEMO_PROTOCOL_TXBUF_LEN, DEMO_PROTOCOL_MAX_MSG_SIZE); } return; }
// Setup a new connection void telnetd_init_state(chanend tcp_svr, xtcp_connection_t *conn) { int i; // Try and find an empty connection slot for (i=0;i<NUM_TELNETD_CONNECTIONS;i++) { if (!connection_states[i].active) break; } // If no free connection slots were found, abort the connection if ( i == NUM_TELNETD_CONNECTIONS ) { xtcp_abort(tcp_svr, conn); } else { // Otherwise, assign the connection to a slot connection_states[i].active = 1; connection_states[i].conn_id = conn->id; connection_states[i].parse_state = PARSING_DATA; connection_states[i].inptr = 0; connection_states[i].first_recv = 1; xtcp_buffered_set_tx_buffer(tcp_svr, conn, &connection_states[i].bufinfo, connection_states[i].outbuf, TELNET_LINE_BUFFER_LEN, (TELNET_LINE_BUFFER_LEN*1/4)); xtcp_set_connection_appstate(tcp_svr, conn, (xtcp_appstate_t) &connection_states[i]); } }