summaryrefslogtreecommitdiff
path: root/perf/src/Ice/raw/cpp/Server.cpp
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2006-09-18 02:19:46 +0000
committerMatthew Newhook <matthew@zeroc.com>2006-09-18 02:19:46 +0000
commit118a445a65118602e8c89254ace480117f923703 (patch)
tree2a9810e0273b842d6a4802bb808d9deaa95a2d36 /perf/src/Ice/raw/cpp/Server.cpp
parentdos2unix (diff)
downloadice-118a445a65118602e8c89254ace480117f923703.tar.bz2
ice-118a445a65118602e8c89254ace480117f923703.tar.xz
ice-118a445a65118602e8c89254ace480117f923703.zip
added support for big/little endian.
Diffstat (limited to 'perf/src/Ice/raw/cpp/Server.cpp')
-rwxr-xr-xperf/src/Ice/raw/cpp/Server.cpp85
1 files changed, 58 insertions, 27 deletions
diff --git a/perf/src/Ice/raw/cpp/Server.cpp b/perf/src/Ice/raw/cpp/Server.cpp
index 40213a5e934..8689019fcd1 100755
--- a/perf/src/Ice/raw/cpp/Server.cpp
+++ b/perf/src/Ice/raw/cpp/Server.cpp
@@ -15,40 +15,40 @@
#ifdef _WIN32
# include <winsock2.h>
typedef int ssize_t;
+# include <sys/timeb.h>
#else
-# include <unistd.h>
-# include <fcntl.h>
-# include <sys/socket.h>
-
-# if defined(__hpux)
-# include <sys/time.h>
-# else
-# include <sys/select.h>
-# endif
+# include <sys/types.h>
+# include <sys/socket.h>
# include <netinet/in.h>
-# include <netinet/tcp.h>
# include <arpa/inet.h>
-# include <netdb.h>
-#endif
-
-#ifdef _WIN32
-# include <sys/timeb.h>
-#else
# include <sys/time.h>
-#endif
-#ifndef _WIN32
# define SOCKET int
# define SOCKET_ERROR -1
# define INVALID_SOCKET -1
+
#endif
#include <errno.h>
#include <iostream>
+#if defined(__i386) || defined(_M_IX86) || defined(__x86_64) || \
+ defined(_M_X64) || defined(_M_IA64) || defined(__alpha__) || \
+ defined(__MIPSEL__)
+# define ICE_LITTLE_ENDIAN
+#elif defined(__sparc) || defined(__sparc__) || defined(__hppa) || \
+ defined(__ppc__) || defined(_ARCH_COM) || defined(__MIPSEB__)
+# define ICE_BIG_ENDIAN
+#else
+# error "Unknown architecture"
+#endif
+
using namespace std;
+//
+// Ripped off from the Ice core.
+//
namespace Protocol
{
@@ -146,22 +146,50 @@ const char replyHdr[] =
}
-void
+static void
putInt(char* base, int& offset, int v)
{
- memcpy(base + offset, &v, sizeof(int));
+ char* dest = base+offset;
+#ifdef ICE_BIG_ENDIAN
+ const char* src = reinterpret_cast<const char*>(&v) + sizeof(Ice::Int) - 1;
+ *dest++ = *src--;
+ *dest++ = *src--;
+ *dest++ = *src--;
+ *dest = *src;
+#else
+ const char* src = reinterpret_cast<const char*>(&v);
+ *dest++ = *src++;
+ *dest++ = *src++;
+ *dest++ = *src++;
+ *dest = *src;
+#endif
offset += sizeof(int);
}
-int
-getInt(char* base, int& offset)
+static int
+getInt(const char* base, int& offset)
{
- int v = *(int*)(base + offset);
+ const char* src = base+offset;
offset += sizeof(int);
+ int v;
+#ifdef ICE_BIG_ENDIAN
+ char* dest = reinterpret_cast<char*>(&v) + sizeof(Ice::Int) - 1;
+ *dest-- = *src++;
+ *dest-- = *src++;
+ *dest-- = *src++;
+ *dest = *src;
+#else
+ char* dest = reinterpret_cast<char*>(&v);
+ *dest++ = *src++;
+ *dest++ = *src++;
+ *dest++ = *src++;
+ *dest = *src;
+#endif
+
return v;
}
-int
+static int
readSize(char* base, int& offset)
{
int sz = base[offset++];
@@ -172,7 +200,7 @@ readSize(char* base, int& offset)
return sz;
}
-bool
+static bool
rawcmp(char* src, int srcLen, char* dest, int offset, int len)
{
if(srcLen != len)
@@ -189,7 +217,7 @@ rawcmp(char* src, int srcLen, char* dest, int offset, int len)
return true;
}
-void
+static void
run(SOCKET fd)
{
char header[Protocol::headerSize];
@@ -371,8 +399,11 @@ main(int argc, char* argv[])
SOCKET fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(fd == INVALID_SOCKET)
{
- //cerr << "Create socket failed! " << WSAGetLastError() << endl;
+#ifdef WIN32
+ cerr << "Create socket failed! " << WSAGetLastError() << endl;
+#else
cerr << "Create socket failed! " << errno << endl;
+#endif
return EXIT_FAILURE;
}