Do not allow ports below 1024; More verbosity for udp_open_socket()

This commit is contained in:
zicodxx 2012-05-16 00:59:14 +02:00
parent ffeddf4db6
commit eb87ed15e1
2 changed files with 20 additions and 13 deletions

View file

@ -2,7 +2,7 @@ D1X-Rebirth Changelog
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
--------

View file

@ -223,8 +223,8 @@ int udp_open_socket(int socknum, int port)
memset( &sAddr, '\0', sizeof( sAddr ) );
if ((UDP_Socket[socknum] = socket (_af, SOCK_DGRAM, 0)) < 0) {
con_printf(CON_URGENT,"udp_open_socket: socket creation failed\n");
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not create socket");
con_printf(CON_URGENT,"udp_open_socket: socket creation failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not create socket.", port);
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)
{
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed\n");
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not bind name to socket");
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not bind name to socket.", port);
udp_close_socket(socknum);
return -1;
}
@ -284,21 +284,23 @@ int udp_open_socket(int socknum, int port)
{
// ai_family is not identic
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;
}
if ((UDP_Socket[socknum] = socket (sres->ai_family, SOCK_DGRAM, 0)) < 0)
{
con_printf(CON_URGENT,"udp_open_socket: socket creation failed\n");
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not create socket");
con_printf(CON_URGENT,"udp_open_socket: socket creation failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not create socket.", port);
freeaddrinfo (res);
return -1;
}
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");
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not bind name to socket");
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not bind name to socket.", port);
udp_close_socket(socknum);
freeaddrinfo (res);
return -1;
@ -308,8 +310,8 @@ int udp_open_socket(int socknum, int port)
}
else {
UDP_Socket[socknum] = -1;
con_printf(CON_URGENT,"udp_open_socket (getaddrinfo):%s\n", gai_strerror (err));
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not get address information:\n%s",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,"Port: %i\nCould not get address information:\n%s", port, gai_strerror (err));
}
setsockopt( UDP_Socket[socknum], SOL_SOCKET, SO_BROADCAST, &bcast, sizeof(bcast) );
#endif
@ -369,11 +371,16 @@ int udp_receive_packet(int socknum, ubyte *text, int len, struct _sockaddr *send
/* Tracker initialization */
int udp_tracker_init()
{
int tracker_port = d_rand() % 0xffff;
while (tracker_port <= 1024)
tracker_port = d_rand() % 0xffff;
// Zero it out
memset( &TrackerSocket, 0, sizeof( TrackerSocket ) );
// Open the socket
udp_open_socket( 2, d_rand() % 0xffff );
udp_open_socket( 2, tracker_port );
// Fill the address
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;
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);
nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal port");