Ejemplo n.º 1
0
// 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]);
    }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 4
0
// 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]);

    }
}