/* ----------------------------------------------------------------------------- * * -------------------------------------------------------------------------- */ 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); }
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; }