Do not allow ports below 1024; More verbosity for udp_open_socket()
This commit is contained in:
parent
ffeddf4db6
commit
eb87ed15e1
|
@ -2,7 +2,7 @@ D1X-Rebirth Changelog
|
||||||
|
|
||||||
20120515
|
20120515
|
||||||
--------
|
--------
|
||||||
main/net_udp.c: Do not send endlevel packets to disconnected (but still saved) clients
|
main/net_udp.c: Do not send endlevel packets to disconnected (but still saved) clients; Do not allow ports below 1024; More verbosity for udp_open_socket()
|
||||||
|
|
||||||
20120514
|
20120514
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -223,8 +223,8 @@ int udp_open_socket(int socknum, int port)
|
||||||
memset( &sAddr, '\0', sizeof( sAddr ) );
|
memset( &sAddr, '\0', sizeof( sAddr ) );
|
||||||
|
|
||||||
if ((UDP_Socket[socknum] = socket (_af, SOCK_DGRAM, 0)) < 0) {
|
if ((UDP_Socket[socknum] = socket (_af, SOCK_DGRAM, 0)) < 0) {
|
||||||
con_printf(CON_URGENT,"udp_open_socket: socket creation failed\n");
|
con_printf(CON_URGENT,"udp_open_socket: socket creation failed (port %i)\n", port);
|
||||||
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not create socket");
|
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not create socket.", port);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,8 +243,8 @@ int udp_open_socket(int socknum, int port)
|
||||||
|
|
||||||
if (bind (UDP_Socket[socknum], (struct sockaddr *) &sAddr, sizeof (struct sockaddr)) < 0)
|
if (bind (UDP_Socket[socknum], (struct sockaddr *) &sAddr, sizeof (struct sockaddr)) < 0)
|
||||||
{
|
{
|
||||||
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed\n");
|
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed (port %i)\n", port);
|
||||||
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not bind name to socket");
|
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not bind name to socket.", port);
|
||||||
udp_close_socket(socknum);
|
udp_close_socket(socknum);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -284,21 +284,23 @@ int udp_open_socket(int socknum, int port)
|
||||||
{
|
{
|
||||||
// ai_family is not identic
|
// ai_family is not identic
|
||||||
freeaddrinfo (res);
|
freeaddrinfo (res);
|
||||||
|
con_printf(CON_URGENT,"udp_open_socket: ai_family not identic (port %i)\n", port);
|
||||||
|
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nai_family_not identic.", port);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((UDP_Socket[socknum] = socket (sres->ai_family, SOCK_DGRAM, 0)) < 0)
|
if ((UDP_Socket[socknum] = socket (sres->ai_family, SOCK_DGRAM, 0)) < 0)
|
||||||
{
|
{
|
||||||
con_printf(CON_URGENT,"udp_open_socket: socket creation failed\n");
|
con_printf(CON_URGENT,"udp_open_socket: socket creation failed (port %i)\n", port);
|
||||||
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not create socket");
|
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not create socket.", port);
|
||||||
freeaddrinfo (res);
|
freeaddrinfo (res);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((err = bind (UDP_Socket[socknum], sres->ai_addr, sres->ai_addrlen)) < 0)
|
if ((err = bind (UDP_Socket[socknum], sres->ai_addr, sres->ai_addrlen)) < 0)
|
||||||
{
|
{
|
||||||
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed\n");
|
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed (port %i)\n", port);
|
||||||
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not bind name to socket");
|
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not bind name to socket.", port);
|
||||||
udp_close_socket(socknum);
|
udp_close_socket(socknum);
|
||||||
freeaddrinfo (res);
|
freeaddrinfo (res);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -308,8 +310,8 @@ int udp_open_socket(int socknum, int port)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
UDP_Socket[socknum] = -1;
|
UDP_Socket[socknum] = -1;
|
||||||
con_printf(CON_URGENT,"udp_open_socket (getaddrinfo):%s\n", gai_strerror (err));
|
con_printf(CON_URGENT,"udp_open_socket (getaddrinfo):%s failed. port %i\n", gai_strerror (err), port);
|
||||||
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not get address information:\n%s",gai_strerror (err));
|
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not get address information:\n%s", port, gai_strerror (err));
|
||||||
}
|
}
|
||||||
setsockopt( UDP_Socket[socknum], SOL_SOCKET, SO_BROADCAST, &bcast, sizeof(bcast) );
|
setsockopt( UDP_Socket[socknum], SOL_SOCKET, SO_BROADCAST, &bcast, sizeof(bcast) );
|
||||||
#endif
|
#endif
|
||||||
|
@ -369,11 +371,16 @@ int udp_receive_packet(int socknum, ubyte *text, int len, struct _sockaddr *send
|
||||||
/* Tracker initialization */
|
/* Tracker initialization */
|
||||||
int udp_tracker_init()
|
int udp_tracker_init()
|
||||||
{
|
{
|
||||||
|
int tracker_port = d_rand() % 0xffff;
|
||||||
|
|
||||||
|
while (tracker_port <= 1024)
|
||||||
|
tracker_port = d_rand() % 0xffff;
|
||||||
|
|
||||||
// Zero it out
|
// Zero it out
|
||||||
memset( &TrackerSocket, 0, sizeof( TrackerSocket ) );
|
memset( &TrackerSocket, 0, sizeof( TrackerSocket ) );
|
||||||
|
|
||||||
// Open the socket
|
// Open the socket
|
||||||
udp_open_socket( 2, d_rand() % 0xffff );
|
udp_open_socket( 2, tracker_port );
|
||||||
|
|
||||||
// Fill the address
|
// Fill the address
|
||||||
if( udp_dns_filladdr( (char *)GameArg.MplTrackerAddr, GameArg.MplTrackerPort, &TrackerSocket ) < 0 )
|
if( udp_dns_filladdr( (char *)GameArg.MplTrackerAddr, GameArg.MplTrackerPort, &TrackerSocket ) < 0 )
|
||||||
|
@ -588,7 +595,7 @@ static int manual_join_game_handler(newmenu *menu, d_event *event, direct_join *
|
||||||
{
|
{
|
||||||
int sockres = -1;
|
int sockres = -1;
|
||||||
|
|
||||||
if ((atoi(UDP_MyPort)) < 0 ||(atoi(UDP_MyPort)) > 65535)
|
if ((atoi(UDP_MyPort)) <= 1024 ||(atoi(UDP_MyPort)) > 65535)
|
||||||
{
|
{
|
||||||
snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", UDP_PORT_DEFAULT);
|
snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", UDP_PORT_DEFAULT);
|
||||||
nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal port");
|
nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal port");
|
||||||
|
|
Loading…
Reference in a new issue