Add IP field to client information and display client IP in the server tab's connected client list

This commit is contained in:
Adam Honse 2020-05-07 00:51:43 -05:00
parent 6bfc9dd9db
commit 3ad0986ae7
4 changed files with 56 additions and 4 deletions

View file

@ -5,6 +5,9 @@
#include <sys/ioctl.h>
#include <netinet/tcp.h>
#include <sys/types.h>
#include <arpa/inet.h>
#else
#include <ws2tcpip.h>
#endif
#include <memory.h>
#include <errno.h>
@ -40,6 +43,35 @@ bool NetworkServer::GetOnline()
return server_online;
}
unsigned int NetworkServer::GetNumClients()
{
return ServerClients.size();
}
const char * NetworkServer::GetClientString(unsigned int client_num)
{
if(client_num < ServerClients.size())
{
return ServerClients[client_num]->client_string.c_str();
}
else
{
return "";
}
}
const char * NetworkServer::GetClientIP(unsigned int client_num)
{
if(client_num < ServerClients.size())
{
return ServerClients[client_num]->client_ip;
}
else
{
return "";
}
}
void NetworkServer::SetPort(unsigned short new_port)
{
if(server_online == false)
@ -158,7 +190,9 @@ void NetworkServer::ConnectionThreadFunction()
/*-------------------------------------------------*\
| Accept the client connection |
\*-------------------------------------------------*/
client_info->client_sock = accept_select(server_sock, NULL, NULL);
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
client_info->client_sock = accept_select(server_sock, (struct sockaddr *)&client_addr, &client_addr_len);
if(client_info->client_sock < 0)
{
@ -176,6 +210,10 @@ void NetworkServer::ConnectionThreadFunction()
ioctlsocket(client_info->client_sock, FIONBIO, &arg);
setsockopt(client_info->client_sock, IPPROTO_TCP, TCP_NODELAY, &yes, sizeof(yes));
inet_ntop(AF_INET, &client_addr.sin_addr, client_info->client_ip, INET_ADDRSTRLEN);
client_info->client_string = "Client";
//Start a listener thread for the new client socket
client_info->client_listen_thread = new std::thread(&NetworkServer::ListenThreadFunction, this, client_info);