Ejemplo n.º 1
0
/* -----------------------------------------------------------------------------
 *
 * -------------------------------------------------------------------------- */
static void init_xtcpd_state(xtcpd_state_t *s,
							 xtcp_protocol_t protocol,
							 xtcp_ipaddr_t remote_addr,
							 int local_port,
							 int remote_port,
							 void *conn) {
  int linknum;
  int connect_request = s->s.connect_request;
  int connection_type = s->conn.connection_type;

  if (connect_request) {
    linknum = s->linknum;
  } else {
    connection_type = XTCP_SERVER_CONNECTION;
    if (protocol == XTCP_PROTOCOL_TCP) {
      linknum = get_listener_linknum(tcp_listeners, NUM_TCP_LISTENERS, local_port);
    }
    else {
      linknum = get_listener_linknum(udp_listeners, NUM_UDP_LISTENERS, local_port);
    }
  }

  memset(s, 0, sizeof(xtcpd_state_t));

  // Find and use a GUID that is not being used by another connection
  while (lookup_xtcpd_state(guid) != NULL)
  {
    guid++;
    if (guid > MAX_GUID)
      guid = 1;
  }

  s->conn.connection_type = connection_type;
  s->linknum = linknum;
  s->conn.id = guid;
  s->conn.local_port = HTONS(local_port);
  s->conn.remote_port = HTONS(remote_port);
  s->conn.protocol = protocol;
  s->s.uip_conn = (int) conn;
#ifdef XTCP_ENABLE_PARTIAL_PACKET_ACK
  s->s.accepts_partial_ack = 0;
#endif
  XTCP_IPADDR_CPY(s->conn.remote_addr.u8, remote_addr.u8);
}
Ejemplo n.º 2
0
void xtcpd_init_state(xtcpd_state_t *s,
                      xtcp_protocol_t protocol,
                      xtcp_ipaddr_t remote_addr,
                      int local_port,
                      int remote_port,
                      void *conn) {
    int i;
    int linknum;
    int connect_request = s->s.connect_request;
    int connection_type = s->conn.connection_type;

    if (connect_request) {
        linknum = s->linknum;
    }
    else {
        connection_type = XTCP_SERVER_CONNECTION;
        if (protocol == XTCP_PROTOCOL_TCP) {
            linknum = get_listener_linknum(tcp_listeners, NUM_TCP_LISTENERS, local_port);
        }
        else {
            linknum = get_listener_linknum(udp_listeners, NUM_UDP_LISTENERS, local_port);
        }
    }

    memset(s, 0, sizeof(xtcpd_state_t));

    s->conn.connection_type = connection_type;
    s->linknum = linknum;
    s->conn.id = guid;
    s->conn.local_port = HTONS(local_port);
    s->conn.remote_port = HTONS(remote_port);
    s->conn.protocol = protocol;
    s->s.uip_conn = (int) conn;
    for (i=0; i<4; i++)
        s->conn.remote_addr[i] = remote_addr[i];
    guid++;
    if (guid>MAX_GUID)
        guid = 1;

}