aboutsummaryrefslogtreecommitdiff
path: root/dep/g3dlite/source/NetworkDevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dep/g3dlite/source/NetworkDevice.cpp')
-rw-r--r--dep/g3dlite/source/NetworkDevice.cpp99
1 files changed, 53 insertions, 46 deletions
diff --git a/dep/g3dlite/source/NetworkDevice.cpp b/dep/g3dlite/source/NetworkDevice.cpp
index 1fc794479f5..e9d4f112c5a 100644
--- a/dep/g3dlite/source/NetworkDevice.cpp
+++ b/dep/g3dlite/source/NetworkDevice.cpp
@@ -31,19 +31,18 @@ std::ostream& operator<<(std::ostream& os, const NetAddress& a) {
static void logSocketInfo(const SOCKET& sock) {
uint32 val;
socklen_t sz = 4;
- int ret;
- ret = getsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char*)&val, (socklen_t*)&sz);
+ getsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char*)&val, (socklen_t*)&sz);
logPrintf("SOL_SOCKET/SO_RCVBUF = %d\n", val);
- ret = getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char*)&val, (socklen_t*)&sz);
+ getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char*)&val, (socklen_t*)&sz);
logPrintf("SOL_SOCKET/SO_SNDBUF = %d\n", val);
// Note: timeout = 0 means no timeout
- ret = getsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&val, (socklen_t*)&sz);
+ getsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&val, (socklen_t*)&sz);
logPrintf("SOL_SOCKET/SO_RCVTIMEO = %d\n", val);
- ret = getsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&val, (socklen_t*)&sz);
+ getsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&val, (socklen_t*)&sz);
logPrintf("SOL_SOCKET/SO_SNDTIMEO = %d\n", val);
}
@@ -63,7 +62,7 @@ static int selectOneReadSocket(const SOCKET& sock) {
FD_ZERO(&socketSet);
FD_SET(sock, &socketSet);
- int ret = select(sock + 1, &socketSet, NULL, NULL, &timeout);
+ int ret = select((int)sock + 1, &socketSet, NULL, NULL, &timeout);
return ret;
}
@@ -102,7 +101,7 @@ static int selectOneWriteSocket(const SOCKET& sock) {
FD_ZERO(&socketSet);
FD_SET(sock, &socketSet);
- return select(sock + 1, NULL, &socketSet, NULL, &timeout);
+ return select((int)sock + 1, NULL, &socketSet, NULL, &timeout);
}
///////////////////////////////////////////////////////////////////////////////
@@ -146,7 +145,7 @@ std::string NetworkDevice::localHostName() const {
return gethostbyname(ac)->h_name;
}
-#ifndef G3D_WIN32
+#ifndef G3D_WINDOWS
const char* errnoToString() {
switch (errno) {
case EBADF:
@@ -192,31 +191,31 @@ void NetworkDevice::EthernetAdapter::describe(TextOutput& t) const {
t.writeNewline();
t.writeSymbols("hostname", "=");
- t.writeString(hostname);
+ t.writeString(hostname + ";");
t.writeNewline();
t.writeSymbols("name", "=");
- t.writeString(name);
+ t.writeString(name + ";");
t.writeNewline();
t.writeSymbols("ip", "=");
- t.writeSymbol(formatIP(ip));
+ t.writeSymbol("\"" + formatIP(ip) + "\";");
t.writeNewline();
t.writeSymbols("subnet", "=");
- t.writeSymbol(formatIP(subnet));
+ t.writeSymbol("\"" + formatIP(subnet) + "\";");
t.writeNewline();
t.writeSymbols("broadcast", "=");
- t.writeSymbol(formatIP(broadcast));
+ t.writeSymbol("\"" + formatIP(broadcast) + "\";");
t.writeNewline();
t.writeSymbols("mac", "=");
- t.writeSymbol(formatMAC(mac));
+ t.writeSymbol("\"" + formatMAC(mac) + "\";");
t.writeNewline();
t.popIndent();
- t.writeSymbol("}");
+ t.writeSymbol("};");
t.writeNewline();
}
@@ -243,15 +242,17 @@ std::string NetworkDevice::formatMAC(const uint8 MAC[6]) {
}
-#ifdef G3D_WIN32
+#ifdef G3D_WINDOWS
bool NetworkDevice::init() {
debugAssert(! initialized);
logPrintf("Network Startup");
logPrintf("Starting WinSock networking.\n");
- WSADATA wsda;
- WSAStartup(MAKEWORD(G3D_WINSOCK_MAJOR_VERSION, G3D_WINSOCK_MINOR_VERSION), &wsda);
+
+// G3D now initializes winsock through ENet
+// WSADATA wsda;
+// WSAStartup(MAKEWORD(G3D_WINSOCK_MAJOR_VERSION, G3D_WINSOCK_MINOR_VERSION), &wsda);
std::string hostname = "localhost";
{
@@ -280,7 +281,9 @@ bool NetworkDevice::init() {
std::string machine = localHostName();
std::string addr = NetAddress(machine, 0).ipString();
+ /*
logPrintf(
+
"Network:\n"
" Status: %s\n"
" Loaded winsock specification version %d (%d is "
@@ -293,6 +296,7 @@ bool NetworkDevice::init() {
wsda.wHighVersion,
wsda.iMaxSockets,
wsda.iMaxUdpDg);
+ */
// TODO: WSAIoctl for subnet and broadcast addresses
// http://msdn.microsoft.com/en-us/library/ms741621(VS.85).aspx
@@ -449,7 +453,7 @@ bool NetworkDevice::init() {
}
// Extract all interesting adapters from the table
- for (AdapterTable::Iterator it = table.begin(); it.hasMore(); ++it) {
+ for (AdapterTable::Iterator it = table.begin(); it.isValid(); ++it) {
const EthernetAdapter& adapter = it->value;
// Only add adapters that have IP addresses
@@ -471,11 +475,10 @@ bool NetworkDevice::init() {
void NetworkDevice::_cleanup() {
debugAssert(initialized);
- logPrintf("Network Cleanup");
-# ifdef G3D_WIN32
- WSACleanup();
+# ifdef G3D_WINDOWS
+ // Now handled through enet
+// WSACleanup();
# endif
- logPrintf("Network cleaned up.");
}
bool NetworkDevice::bind(SOCKET sock, const NetAddress& addr) const {
@@ -497,7 +500,7 @@ bool NetworkDevice::bind(SOCKET sock, const NetAddress& addr) const {
void NetworkDevice::closesocket(SOCKET& sock) const {
if (sock != 0) {
- #ifdef G3D_WIN32
+ #ifdef G3D_WINDOWS
::closesocket(sock);
#else
close(sock);
@@ -512,7 +515,7 @@ void NetworkDevice::closesocket(SOCKET& sock) const {
void NetworkDevice::localHostAddresses(Array<NetAddress>& array) const {
array.resize(0);
- char ac[128];
+ char ac[256];
if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
Log::common()->printf("Error while getting local host name\n");
@@ -606,13 +609,16 @@ static void increaseBufferSize(SOCKET sock) {
//////////////////////////////////////////////////////////////////////////////
ReliableConduitRef ReliableConduit::create(const NetAddress& address) {
- return new ReliableConduit(address);
+ return ReliableConduitRef(new ReliableConduit(address));
}
-ReliableConduit::ReliableConduit(
- const NetAddress& _addr) : state(NO_MESSAGE), receiveBuffer(NULL),
- receiveBufferTotalSize(0), receiveBufferUsedSize(0) {
+ReliableConduit::ReliableConduit
+ (const NetAddress& _addr) :
+ state(NO_MESSAGE),
+ receiveBuffer(NULL),
+ receiveBufferTotalSize(0),
+ receiveBufferUsedSize(0) {
NetworkDevice* nd = NetworkDevice::instance();
@@ -829,7 +835,7 @@ uint32 ReliableConduit::waitingMessageType() {
void ReliableConduit::sendBuffer(const BinaryOutput& b) {
NetworkDevice* nd = NetworkDevice::instance();
- int ret = ::send(sock, (const char*)b.getCArray(), b.size(), 0);
+ int ret = ::send(sock, (const char*)b.getCArray(), (int)b.size(), 0);
if (ret == SOCKET_ERROR) {
Log::common()->println("Error occured while sending message.");
@@ -938,11 +944,11 @@ void ReliableConduit::receiveIntoBuffer() {
// Read the data itself
int ret = 0;
- uint32 left = messageSize - receiveBufferUsedSize;
+ uint32 left = messageSize - (uint32)receiveBufferUsedSize;
int count = 0;
while ((ret != SOCKET_ERROR) && (left > 0) && (count < 100)) {
- ret = recv(sock, ((char*)receiveBuffer) + receiveBufferUsedSize, left, 0);
+ ret = recv(sock, ((char*)receiveBuffer) + (uint32)receiveBufferUsedSize, left, 0);
if (ret > 0) {
left -= ret;
@@ -985,11 +991,12 @@ LightweightConduitRef LightweightConduit::create(
bool enableReceive,
bool enableBroadcast) {
- return new LightweightConduit(receivePort, enableReceive, enableBroadcast);
+ return LightweightConduitRef(new LightweightConduit(receivePort, enableReceive, enableBroadcast));
}
-LightweightConduit::LightweightConduit(
- uint16 port,
+
+LightweightConduit::LightweightConduit
+ (uint16 port,
bool enableReceive,
bool enableBroadcast) {
NetworkDevice* nd = NetworkDevice::instance();
@@ -1064,7 +1071,7 @@ bool LightweightConduit::receive(NetAddress& sender) {
void LightweightConduit::sendBuffer(const NetAddress& a, BinaryOutput& b) {
NetworkDevice* nd = NetworkDevice::instance();
- if (sendto(sock, (const char*)b.getCArray(), b.size(), 0,
+ if (sendto(sock, (const char*)b.getCArray(), (int)b.size(), 0,
(struct sockaddr *) &(a.addr), sizeof(a.addr)) == SOCKET_ERROR) {
Log::common()->printf("Error occured while sending packet "
"to %s\n", inet_ntoa(a.addr.sin_addr));
@@ -1137,7 +1144,7 @@ uint32 LightweightConduit::waitingMessageType() {
///////////////////////////////////////////////////////////////////////////////
NetListenerRef NetListener::create(const uint16 port) {
- return new NetListener(port);
+ return NetListenerRef(new NetListener(port));
}
@@ -1215,20 +1222,20 @@ ReliableConduitRef NetListener::waitForConnection() {
Log::common()->println("Error in NetListener::acceptConnection.");
Log::common()->println(socketErrorCode());
nd->closesocket(sock);
- return NULL;
+ return ReliableConduitRef();
}
Log::common()->printf("%s connected, transferred to socket %d.\n",
inet_ntoa(remote_addr.sin_addr), sClient);
- #ifndef G3D_WIN32
- return new ReliableConduit(sClient,
+ #ifndef G3D_WINDOWS
+ return ReliableConduitRef(new ReliableConduit(sClient,
NetAddress(htonl(remote_addr.sin_addr.s_addr),
- ntohs(remote_addr.sin_port)));
+ ntohs(remote_addr.sin_port))));
#else
- return new ReliableConduit(sClient,
+ return ReliableConduitRef(ReliableConduitRef(new ReliableConduit(sClient,
NetAddress(ntohl(remote_addr.sin_addr.S_un.S_addr),
- ntohs(remote_addr.sin_port)));
+ ntohs(remote_addr.sin_port)))));
#endif
}
@@ -1247,17 +1254,17 @@ bool NetListener::clientWaiting() const {
void NetworkDevice::describeSystem(
TextOutput& t) {
- t.writeSymbols("Network", "{");
+ t.writeSymbols("Network", "=", "{");
t.writeNewline();
t.pushIndent();
for (int i = 0; i < m_adapterArray.size(); ++i) {
+ t.printf("Adapter%d =", i);
m_adapterArray[i].describe(t);
}
-
t.popIndent();
- t.writeSymbols("}");
+ t.writeSymbols("};");
t.writeNewline();
t.writeNewline();
}