diff options
author | Matthew Newhook <matthew@zeroc.com> | 2006-09-18 02:19:46 +0000 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2006-09-18 02:19:46 +0000 |
commit | 118a445a65118602e8c89254ace480117f923703 (patch) | |
tree | 2a9810e0273b842d6a4802bb808d9deaa95a2d36 /perf/src/Ice/raw/cpp/Server.cpp | |
parent | dos2unix (diff) | |
download | ice-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-x | perf/src/Ice/raw/cpp/Server.cpp | 85 |
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; } |