Skip to content

Commit

Permalink
Merge pull request #22 from Foran/networklint
Browse files Browse the repository at this point in the history
Networklint
  • Loading branch information
Foran committed Mar 9, 2018
2 parents 14791cd + cc70e48 commit e6bf439
Show file tree
Hide file tree
Showing 8 changed files with 261 additions and 200 deletions.
3 changes: 2 additions & 1 deletion src/lib/config/config.cc
Expand Up @@ -80,7 +80,8 @@ bool CConfig::Load(const string filename) {
global_Log.mCacheEnabled = true;
if (document.Load(filename)) {
retval = true;
global_Log.Write(LogType::LogType_Info, 10, "Starting new Instance of Descent-Bot");
global_Log.Write(LogType::LogType_Info, 10,
"Starting new Instance of Descent-Bot");
if (string("Configuration") == document.get_Root().get_Name()) {
global_Log.Write(LogType::LogType_Debug, 150,
string("Found root config node (") +
Expand Down
4 changes: 2 additions & 2 deletions src/lib/levelmodel/file.cc
Expand Up @@ -100,8 +100,8 @@ fstreamptr CFile::get_Stream() {
(*file).open(("missions/" + mFilename).c_str(), ios::in | ios::binary);
mPos = (*file).tellg();
} else {
global_Log.Write(LogType::LogType_Debug, 200, "Opening " + mFilename + " from " +
mHog->mFilename);
global_Log.Write(LogType::LogType_Debug, 200, "Opening " + mFilename +
" from " + mHog->mFilename);
file = mHog->get_Stream(mFilename);
cout << ((*file).is_open() ? "True" : "False") << endl;
}
Expand Down
19 changes: 15 additions & 4 deletions src/lib/network/connection.cc
Expand Up @@ -12,16 +12,22 @@
***************************************************/
#include "src/lib/network/connection.h"

using ::std::cout;
using ::std::endl;

namespace DESCENT_BOT {
namespace SRC {
namespace LIB {
namespace NETWORK {

CConnection::CConnection() {
mSocket = CNetwork::get_Instance().socket(PF_INET, SOCK_DGRAM, CNetwork::get_Instance().getprotobyname("udp")->p_proto);
mSocket = CNetwork::get_Instance().socket(PF_INET, SOCK_DGRAM,
CNetwork::get_Instance().getprotobyname("udp")->p_proto);
if (mSocket != -1) {
int on = 1;
CNetwork::get_Instance().setsockopt(mSocket, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on));
CNetwork::get_Instance().setsockopt(mSocket, SOL_SOCKET, SO_BROADCAST,
reinterpret_cast<char *>(&on),
sizeof(on));
}
}

Expand All @@ -39,9 +45,14 @@ void CConnection::find_Game() {
request_packet.Send(mSocket, addr);
PACKET_Game_Info_Lite packet;
socklen_t len;
CNetwork::get_Instance().recvfrom(mSocket, (char *)&packet, 1, MSG_PEEK, (struct sockaddr *)&addr, &len);
CNetwork::get_Instance().recvfrom(mSocket, reinterpret_cast<char *>(&packet),
1, MSG_PEEK, (struct sockaddr *)&addr,
&len);
if (packet.Type == UPID_GAME_INFO_LITE) {
CNetwork::get_Instance().recvfrom(mSocket, (char *)&packet, sizeof(packet), 0, (struct sockaddr *)&addr, &len);
CNetwork::get_Instance().recvfrom(mSocket,
reinterpret_cast<char *>(&packet),
sizeof(packet), 0,
(struct sockaddr *)&addr, &len);
cout << packet.Game_Name << endl;
cout << packet.Mission_Title << endl;
cout << packet.Mission_Name << endl;
Expand Down
163 changes: 86 additions & 77 deletions src/lib/network/connectionmanager.cc
Expand Up @@ -32,19 +32,23 @@ map<string, time_t> CConnectionManager::mGameAges;
* Default constructor
**************************************************/
CConnectionManager::CConnectionManager() {
if(0 == mReferences++) {
mSocket = CNetwork::get_Instance().socket(PF_INET, SOCK_DGRAM, CNetwork::get_Instance().getprotobyname("udp")->p_proto);
if(mSocket != -1) {
int on = 1;
CNetwork::get_Instance().setsockopt(mSocket, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on));
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(42424);
addr.sin_addr.s_addr = INADDR_ANY;
CNetwork::get_Instance().bind(mSocket, (struct sockaddr *)&addr, sizeof(addr));
}
}
if (0 == mReferences++) {
mSocket = CNetwork::get_Instance().socket(PF_INET, SOCK_DGRAM,
CNetwork::get_Instance().getprotobyname("udp")->p_proto);
if (mSocket != -1) {
int on = 1;
CNetwork::get_Instance().setsockopt(mSocket, SOL_SOCKET, SO_BROADCAST,
reinterpret_cast<char *>(&on),
sizeof(on));
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(42424);
addr.sin_addr.s_addr = INADDR_ANY;
CNetwork::get_Instance().bind(mSocket, (struct sockaddr *)&addr,
sizeof(addr));
}
}
}

/**
Expand All @@ -59,26 +63,27 @@ CConnectionManager::CConnectionManager(const CConnectionManager &source) {
* Destructor
**************************************************/
CConnectionManager::~CConnectionManager() {
if(--mReferences) {
for(auto& pair : mConnections) {
delete pair.second;
}
mConnections.clear();
mGames.clear();
mGameAges.clear();
if(mSocket >= 0) {
CNetwork::get_Instance().close(mSocket);
mSocket = -1;
}
}
if (--mReferences) {
for (auto& pair : mConnections) {
delete pair.second;
}
mConnections.clear();
mGames.clear();
mGameAges.clear();
if (mSocket >= 0) {
CNetwork::get_Instance().close(mSocket);
mSocket = -1;
}
}
}

/**
* Copy Assignment operator
* @param source object instance to copy
* @returns a reference to this object
**************************************************/
CConnectionManager &CConnectionManager::operator=(const CConnectionManager &source) {
CConnectionManager &CConnectionManager::operator=(
const CConnectionManager &source) {
mReferences++;
return *this;
}
Expand All @@ -92,60 +97,64 @@ CConnectionManager CConnectionManager::get_Instance() {
}

void CConnectionManager::Pulse() {
fd_set read;
struct timeval tv;
int result;
int max = mSocket;
char packetId;
struct sockaddr_in addr;
socklen_t len;
fd_set read;
struct timeval tv;
int result;
int max = mSocket;
char packetId;
struct sockaddr_in addr;
socklen_t len;

FD_ZERO(&read);

FD_SET(mSocket, &read);
for(auto& pair : mConnections) {
if(pair.second != NULL) {
FD_SET(pair.first, &read);
if(max > (int)pair.first) max = pair.first;
}
}

tv.tv_sec = 0;
tv.tv_usec = 10;

result = CNetwork::get_Instance().select(max + 1, &read, NULL, NULL, &tv);

if(result > 0) {
global_Log.Write(LogType::LogType_Debug, 100, "Received a packet");
if(FD_ISSET(mSocket, &read)) {
len = sizeof(addr);
if(CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, MSG_PEEK, (struct sockaddr *)&addr, &len) > 0) {
switch(packetId) {
case UPID_GAME_INFO_LITE:
case UPID_GAME_INFO:
default:
//throw the packet away
CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, 0, (struct sockaddr *)&addr, &len);
break;
}
}
FD_ZERO(&read);

FD_SET(mSocket, &read);
for (auto& pair : mConnections) {
if (pair.second != NULL) {
FD_SET(pair.first, &read);
if (max > static_cast<int>(pair.first)) max = pair.first;
}
}

tv.tv_sec = 0;
tv.tv_usec = 10;

result = CNetwork::get_Instance().select(max + 1, &read, NULL, NULL, &tv);

if (result > 0) {
global_Log.Write(LogType::LogType_Debug, 100, "Received a packet");
if (FD_ISSET(mSocket, &read)) {
len = sizeof(addr);
if (CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, MSG_PEEK,
(struct sockaddr *)&addr, &len) > 0) {
switch (packetId) {
case UPID_GAME_INFO_LITE:
case UPID_GAME_INFO:
default:
// throw the packet away
CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, 0,
(struct sockaddr *)&addr, &len);
break;
}
}
for(auto& pair : mConnections) {
if(pair.second != NULL && FD_ISSET(mSocket, &read)) {
len = sizeof(addr);
if(CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, MSG_PEEK, (struct sockaddr *)&addr, &len) > 0) {
switch(packetId) {
case UPID_GAME_INFO_LITE:
case UPID_GAME_INFO:
default:
//throw the packet away
CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, 0, (struct sockaddr *)&addr, &len);
break;
}
}
}
}
for (auto& pair : mConnections) {
if (pair.second != NULL && FD_ISSET(mSocket, &read)) {
len = sizeof(addr);
if (CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, MSG_PEEK,
(struct sockaddr *)&addr, &len) > 0) {
switch (packetId) {
case UPID_GAME_INFO_LITE:
case UPID_GAME_INFO:
default:
// throw the packet away
CNetwork::get_Instance().recvfrom(mSocket, &packetId, 1, 0,
(struct sockaddr *)&addr, &len);
break;
}
}
}
}
}
}
}

} // namespace NETWORK
Expand Down
6 changes: 3 additions & 3 deletions src/lib/network/connectionmanager.h
Expand Up @@ -48,9 +48,9 @@ class CConnectionManager {
private:
static int mReferences;
static Descent_Socket mSocket;
static map<Descent_Socket, CConnection *> mConnections;
static map<struct sockaddr_in, string> mGames;
static map<string, time_t> mGameAges;
static ::std::map<Descent_Socket, CConnection *> mConnections;
static ::std::map<struct sockaddr_in, ::std::string> mGames;
static ::std::map<::std::string, time_t> mGameAges;
};

} // namespace NETWORK
Expand Down
29 changes: 17 additions & 12 deletions src/lib/network/network.cc
Expand Up @@ -36,42 +36,47 @@ Descent_Socket CNetwork::socket(int domain, int type, int protocol) {
}

int CNetwork::close(Descent_Socket socket) {
int retval = 0;
int retval = 0;
#ifdef _WIN32
retval = closesocket(socket);
retval = closesocket(socket);
#else
retval = ::close(socket);
retval = ::close(socket);
#endif
return retval;
return retval;
}

void CNetwork::atoinet(const string &input, struct sockaddr_in *addr) {
#ifdef _WIN32
long inAddress;
inAddress = inet_addr(input.c_str());
addr->sin_addr.s_addr = inAddress;
int32_t inAddress;
inAddress = inet_addr(input.c_str());
addr->sin_addr.s_addr = inAddress;
#else
inet_aton(input.c_str(), (struct in_addr *)&addr->sin_addr.s_addr);
inet_aton(input.c_str(), (struct in_addr *)&addr->sin_addr.s_addr);
#endif
}

struct protoent *CNetwork::getprotobyname(const char *name) {
return ::getprotobyname(name);
}

int CNetwork::setsockopt(Descent_Socket sockfd, int level, int optname, const void *optval, socklen_t optlen) {
int CNetwork::setsockopt(Descent_Socket sockfd, int level, int optname,
const void *optval, socklen_t optlen) {
return ::setsockopt(sockfd, level, optname, optval, optlen);
}

ssize_t CNetwork::recvfrom(Descent_Socket sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) {
ssize_t CNetwork::recvfrom(Descent_Socket sockfd, void *buf, size_t len,
int flags, struct sockaddr *src_addr,
socklen_t *addrlen) {
return ::recvfrom(sockfd, buf, len, flags, src_addr, addrlen);
}

int CNetwork::bind(Descent_Socket sockfd, const struct sockaddr *addr, socklen_t addrlen) {
int CNetwork::bind(Descent_Socket sockfd, const struct sockaddr *addr,
socklen_t addrlen) {
return ::bind(sockfd, addr, addrlen);
}

int CNetwork::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) {
int CNetwork::select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout) {
return ::select(nfds, readfds, writefds, exceptfds, timeout);
}

Expand Down
56 changes: 36 additions & 20 deletions src/lib/network/packets.cc
@@ -1,24 +1,40 @@
/****************************************************
* This work is licensed under the Creative
* Commons Attribution-NonCommercial-ShareAlike
* 3.0 Unported License. To view a copy of this
* license, visit
* http://creativecommons.org/licenses/by-nc-sa/3.0/
* or send a letter to Creative Commons, 444
* Castro Street, Suite 900, Mountain View,
* California, 94041, USA.
* Copyright 2018 Ben M. Ward
*
* This work is licensed under the Creative
* Commons Attribution-NonCommercial-ShareAlike
* 3.0 Unported License. To view a copy of this
* license, visit
* http://creativecommons.org/licenses/by-nc-sa/3.0/
* or send a letter to Creative Commons, 444
* Castro Street, Suite 900, Mountain View,
* California, 94041, USA.
***************************************************/
#include "packets.h"
#include "src/lib/network/packets.h"

void CPacket_Request_Game_Info_Lite::Send(int socket, const struct sockaddr_in &addr)
{
PACKET_Request_Game_Info_Lite packet;
packet.Type = UPID_GAME_INFO_LITE_REQ;
packet.Request_ID = 0x52583144;
packet.Major = 0;
packet.Minor = 56;
packet.Micro = 0;
sendto(socket, (char *)&packet, sizeof(packet), 0, (const struct sockaddr *)&addr, sizeof(addr));
int err = errno;
cout << strerror(err) << endl;
using ::std::cout;
using ::std::endl;

namespace DESCENT_BOT {
namespace SRC {
namespace LIB {
namespace NETWORK {

void CPacket_Request_Game_Info_Lite::Send(int socket,
const struct sockaddr_in &addr) {
PACKET_Request_Game_Info_Lite packet;
packet.Type = UPID_GAME_INFO_LITE_REQ;
packet.Request_ID = 0x52583144;
packet.Major = 0;
packet.Minor = 56;
packet.Micro = 0;
sendto(socket, reinterpret_cast<char *>(&packet), sizeof(packet), 0,
(const struct sockaddr *)&addr, sizeof(addr));
int err = errno;
cout << strerror(err) << endl;
}

} // namespace NETWORK
} // namespace LIB
} // namespace SRC
} // namespace DESCENT_BOT

0 comments on commit e6bf439

Please sign in to comment.