THRIFT-5215: Remove portable_endian.h
Client: cpp
Patch: James Lacey

This closes #2152
diff --git a/LICENSE b/LICENSE
index 7bf24c9..a66fb61 100644
--- a/LICENSE
+++ b/LICENSE
@@ -238,18 +238,3 @@
 (By Douglas Crockford <douglas@crockford.com>)
 
 --------------------------------------------------
-For lib/cpp/src/thrift/portable_endian.h
-
-// endian.h
-//
-// https://gist.github.com/panzi/6856583
-//
-// I, Mathias Panzenböck, place this file hereby into the public domain. Use
-// it at your own risk for whatever you like. In case there are
-// jurisdictions that don't support putting things in the public domain you
-// can also consider it to be "dual licensed" under the BSD, MIT and Apache
-// licenses, if you want to. This code is trivial anyway. Consider it an
-// example on how to get the endian conversion functions on different
-// platforms.
-
---------------------------------------------------
diff --git a/lib/cpp/Makefile.am b/lib/cpp/Makefile.am
index bcc6a09..c73a17d 100755
--- a/lib/cpp/Makefile.am
+++ b/lib/cpp/Makefile.am
@@ -141,8 +141,7 @@
                          src/thrift/TApplicationException.h \
                          src/thrift/TLogging.h \
                          src/thrift/TToString.h \
-                         src/thrift/TBase.h \
-                         src/thrift/portable_endian.h
+                         src/thrift/TBase.h
 
 include_concurrencydir = $(include_thriftdir)/concurrency
 include_concurrency_HEADERS = \
diff --git a/lib/cpp/src/thrift/portable_endian.h b/lib/cpp/src/thrift/portable_endian.h
deleted file mode 100644
index e07010e..0000000
--- a/lib/cpp/src/thrift/portable_endian.h
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// endian.h
-//
-// https://gist.github.com/panzi/6856583
-//
-// I, Mathias Panzenböck, place this file hereby into the public domain. Use
-// it at your own risk for whatever you like. In case there are
-// jurisdictions that don't support putting things in the public domain you
-// can also consider it to be "dual licensed" under the BSD, MIT and Apache
-// licenses, if you want to. This code is trivial anyway. Consider it an
-// example on how to get the endian conversion functions on different
-// platforms.
-
-#ifndef PORTABLE_ENDIAN_H__
-#define PORTABLE_ENDIAN_H__
-
-#if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__)
-
-#	define __WINDOWS__
-
-#endif
-
-#if defined(__linux__) || defined(__CYGWIN__)
-
-#	include <endian.h>
-
-#elif defined(__APPLE__)
-
-#	include <libkern/OSByteOrder.h>
-
-#	define htobe16(x) OSSwapHostToBigInt16(x)
-#	define htole16(x) OSSwapHostToLittleInt16(x)
-#	define be16toh(x) OSSwapBigToHostInt16(x)
-#	define le16toh(x) OSSwapLittleToHostInt16(x)
-
-#	define htobe32(x) OSSwapHostToBigInt32(x)
-#	define htole32(x) OSSwapHostToLittleInt32(x)
-#	define be32toh(x) OSSwapBigToHostInt32(x)
-#	define le32toh(x) OSSwapLittleToHostInt32(x)
-
-#	define htobe64(x) OSSwapHostToBigInt64(x)
-#	define htole64(x) OSSwapHostToLittleInt64(x)
-#	define be64toh(x) OSSwapBigToHostInt64(x)
-#	define le64toh(x) OSSwapLittleToHostInt64(x)
-
-#	define __BYTE_ORDER    BYTE_ORDER
-#	define __BIG_ENDIAN    BIG_ENDIAN
-#	define __LITTLE_ENDIAN LITTLE_ENDIAN
-#	define __PDP_ENDIAN    PDP_ENDIAN
-
-#elif defined(__OpenBSD__)
-
-#	include <sys/endian.h>
-
-#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
-
-#	include <sys/endian.h>
-
-#	define be16toh(x) betoh16(x)
-#	define le16toh(x) letoh16(x)
-
-#	define be32toh(x) betoh32(x)
-#	define le32toh(x) letoh32(x)
-
-#	define be64toh(x) betoh64(x)
-#	define le64toh(x) letoh64(x)
-
-#elif defined(__WINDOWS__)
-
-#	include <winsock2.h>
-
-#	if BYTE_ORDER == LITTLE_ENDIAN
-
-#		define htobe16(x) htons(x)
-#		define htole16(x) (x)
-#		define be16toh(x) ntohs(x)
-#		define le16toh(x) (x)
-
-#		define htobe32(x) htonl(x)
-#		define htole32(x) (x)
-#		define be32toh(x) ntohl(x)
-#		define le32toh(x) (x)
-
-#	if defined(__MINGW32__)
-#		define htobe64(x) __builtin_bswap64(x)
-#		define htole64(x) (x)
-#		define be64toh(x) __builtin_bswap64(x)
-#		define le64toh(x) (x)
-#	else
-#		define htobe64(x) htonll(x)
-#		define htole64(x) (x)
-#		define be64toh(x) ntohll(x)
-#		define le64toh(x) (x)
-#	endif
-
-#	elif BYTE_ORDER == BIG_ENDIAN
-
-		/* that would be xbox 360 */
-#		define htobe16(x) (x)
-#		define htole16(x) __builtin_bswap16(x)
-#		define be16toh(x) (x)
-#		define le16toh(x) __builtin_bswap16(x)
-
-#		define htobe32(x) (x)
-#		define htole32(x) __builtin_bswap32(x)
-#		define be32toh(x) (x)
-#		define le32toh(x) __builtin_bswap32(x)
-
-#		define htobe64(x) (x)
-#		define htole64(x) __builtin_bswap64(x)
-#		define be64toh(x) (x)
-#		define le64toh(x) __builtin_bswap64(x)
-
-#	else
-
-#		error byte order not supported
-
-#	endif
-
-#	define __BYTE_ORDER    BYTE_ORDER
-#	define __BIG_ENDIAN    BIG_ENDIAN
-#	define __LITTLE_ENDIAN LITTLE_ENDIAN
-#	define __PDP_ENDIAN    PDP_ENDIAN
-
-#else
-
-#	error platform not supported
-
-#endif
-
-#endif
diff --git a/lib/cpp/src/thrift/transport/TWebSocketServer.h b/lib/cpp/src/thrift/transport/TWebSocketServer.h
index 8edc286..2e94c83 100644
--- a/lib/cpp/src/thrift/transport/TWebSocketServer.h
+++ b/lib/cpp/src/thrift/transport/TWebSocketServer.h
@@ -20,8 +20,6 @@
 #ifndef _THRIFT_TRANSPORT_TWEBSOCKETSERVER_H_
 #define _THRIFT_TRANSPORT_TWEBSOCKETSERVER_H_ 1
 
-#include <thrift/portable_endian.h>
-
 #include <cstdlib>
 #include <iostream>
 #include <sstream>
@@ -29,6 +27,7 @@
 #include <openssl/sha.h>
 
 #include <thrift/config.h>
+#include <thrift/protocol/TProtocol.h>
 #include <thrift/transport/TSocket.h>
 #include <thrift/transport/THttpServer.h>
 #if defined(_MSC_VER) || defined(__MINGW32__)
@@ -200,7 +199,7 @@
 
   void failConnection(CloseCode reason) {
     writeFrameHeader(Opcode::Close);
-    auto buffer = htobe16(static_cast<uint16_t>(reason));
+    auto buffer = htons(static_cast<uint16_t>(reason));
     transport_->write(reinterpret_cast<const uint8_t*>(&buffer), 2);
     transport_->flush();
     transport_->close();
@@ -255,13 +254,13 @@
       if (read < 2) {
         return false;
       }
-      payloadLength = be16toh(*reinterpret_cast<uint16_t*>(headerBuffer));
+      payloadLength = ntohs(*reinterpret_cast<uint16_t*>(headerBuffer));
     } else if (payloadLength == 127) {
       read = transport_->read(headerBuffer, 8);
       if (read < 8) {
         return false;
       }
-      payloadLength = be64toh(*reinterpret_cast<uint64_t*>(headerBuffer));
+      payloadLength = THRIFT_ntohll(*reinterpret_cast<uint64_t*>(headerBuffer));
       if ((payloadLength & 0x8000000000000000) != 0) {
         failConnection(CloseCode::ProtocolError);
         throw TTransportException(
@@ -307,7 +306,7 @@
       if (length >= 2) {
         uint8_t buffer[2];
         readBuffer_.read(buffer, 2);
-        CloseCode closeCode = static_cast<CloseCode>(be16toh(*reinterpret_cast<uint16_t*>(buffer)));
+        CloseCode closeCode = static_cast<CloseCode>(ntohs(*reinterpret_cast<uint16_t*>(buffer)));
         THRIFT_UNUSED_VARIABLE(closeCode);
         string closeReason = readBuffer_.readAsString(length - 2);
         T_DEBUG("Connection closed: %d %s", closeCode, closeReason);
@@ -359,10 +358,10 @@
       header[1] = static_cast<uint8_t>(length);
     } else if (length < 65536) {
       header[1] = 126;
-      *reinterpret_cast<uint16_t*>(header + 2) = htobe16(length);
+      *reinterpret_cast<uint16_t*>(header + 2) = htons(length);
     } else {
       header[1] = 127;
-      *reinterpret_cast<uint64_t*>(header + 2) = htobe64(length);
+      *reinterpret_cast<uint64_t*>(header + 2) = THRIFT_htonll(length);
     }
 
     transport_->write(header, headerSize);