MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / nw_HandleConnectResponse

Function nw_HandleConnectResponse

networking/networking.cpp:1524–1607  ·  view source on GitHub ↗

MTS: only used in this file

Source from the content-addressed store, hash-verified

1522
1523// MTS: only used in this file
1524void nw_HandleConnectResponse(uint8_t *data, int len, network_address *server_addr) {
1525
1526 int i;
1527 static reliable_header ack_header;
1528 static reliable_header conn_header;
1529 SOCKADDR rcv_addr;
1530
1531 memcpy(&ack_header, data, len);
1532
1533 if (NP_TCP == server_addr->connection_type) {
1534 SOCKADDR_IN *inaddr = (SOCKADDR_IN *)&rcv_addr;
1535 memcpy(&inaddr->sin_addr, &server_addr->address, 4);
1536 inaddr->sin_port = htons(server_addr->port);
1537 }
1538
1539 mprintf(0, "Got a connect response!\n");
1540 if (ack_header.type == RNT_ACK) {
1541 int *acknum = (int *)&ack_header.data;
1542 if (INTEL_INT(*acknum) == CONNECTSEQ) {
1543 // if(memcmp(&rcv_addr,&sockaddr,sizeof(SOCKADDR))==0)
1544 {
1545 for (i = 1; i < MAXRELIABLESOCKETS; i++) {
1546 if (reliable_sockets[i].status == RNF_UNUSED) {
1547 // Add the new connection here.
1548 memset(&reliable_sockets[i], 0, sizeof(reliable_socket));
1549 reliable_sockets[i].connection_type = server_addr->connection_type;
1550 memcpy(&reliable_sockets[i].net_addr, server_addr, sizeof(network_address));
1551 reliable_sockets[i].last_packet_received = timer_GetTime();
1552 memcpy(&reliable_sockets[i].addr, &rcv_addr, sizeof(SOCKADDR));
1553 reliable_sockets[i].status = RNF_LIMBO;
1554 Net_connect_socket_id = i;
1555 reliable_sockets[i].last_sent = timer_GetTime();
1556 reliable_sockets[i].waiting_packet_number = -1;
1557 mprintf(0, "Succesfully connected to server in nw_ConnectToServer().\n");
1558 // Now send I_AM_HERE packet
1559 conn_header.type = RNT_I_AM_HERE;
1560 conn_header.seq = INTEL_SHORT((int16_t)(~CONNECTSEQ));
1561 conn_header.data_len = INTEL_SHORT((int16_t)0);
1562 serverconn = i;
1563 first_sent_iamhere = timer_GetTime();
1564 last_sent_iamhere = timer_GetTime();
1565
1566 int rcode =
1567 nw_SendWithID(NWT_RELIABLE, (uint8_t *)&conn_header, RELIABLE_PACKET_HEADER_ONLY_SIZE, server_addr);
1568 // int rcode = sendto(typeless_sock,(char
1569 // *)&conn_header,RELIABLE_PACKET_HEADER_ONLY_SIZE,0,addr,sizeof(SOCKADDR));
1570 if (rcode == SOCKET_ERROR) {
1571 Net_connect_socket_id = INVALID_SOCKET;
1572 reliable_sockets[i].status = RNF_UNUSED;
1573 memset(&reliable_sockets[i], 0, sizeof(reliable_socket));
1574 mprintf(0, "Unable to send packet in nw_ConnectToServer()\n");
1575
1576 Net_connect_sequence = R_NET_SEQUENCE_FAILED;
1577 return;
1578 }
1579 reliable_sockets[i].last_packet_sent = timer_GetTime();
1580 /*
1581 float f;

Callers 1

nw_WorkReliableFunction · 0.85

Calls 1

nw_SendWithIDFunction · 0.85

Tested by

no test coverage detected