summaryrefslogtreecommitdiff
path: root/cpp/src/IceWS/TransceiverI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceWS/TransceiverI.cpp')
-rw-r--r--cpp/src/IceWS/TransceiverI.cpp55
1 files changed, 51 insertions, 4 deletions
diff --git a/cpp/src/IceWS/TransceiverI.cpp b/cpp/src/IceWS/TransceiverI.cpp
index ad3bb210d59..597e432b19b 100644
--- a/cpp/src/IceWS/TransceiverI.cpp
+++ b/cpp/src/IceWS/TransceiverI.cpp
@@ -19,7 +19,7 @@
#include <Ice/Base64.h>
#include <IceUtil/Random.h>
#include <IceUtil/StringUtil.h>
-
+
#include <IceUtil/DisableWarnings.h>
#include <stdint.h>
@@ -123,6 +123,47 @@ Long nlltoh(const Byte* src)
return v;
}
+Short htons(Short v)
+{
+ Short result;
+ Byte* dest = reinterpret_cast<Byte*>(&result);
+
+ //
+ // Transfer a short in network (big-endian) order.
+ //
+#ifdef ICE_BIG_ENDIAN
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
+ *dest++ = *src++;
+ *dest = *src;
+#else
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Short) - 1;
+ *dest++ = *src--;
+ *dest = *src;
+#endif
+ return result;
+}
+
+Short ntohs(Short value)
+{
+ const Byte* src = reinterpret_cast<Byte*>(&value);
+ Short v;
+
+ //
+ // Extract a 64-bit integer in network (big-endian) order.
+ //
+#ifdef ICE_BIG_ENDIAN
+ Byte* dest = reinterpret_cast<Byte*>(&v);
+ *dest++ = *src++;
+ *dest = *src;
+#else
+ Byte* dest = reinterpret_cast<Byte*>(&v) + sizeof(Short) - 1;
+ *dest-- = *src++;
+ *dest = *src;
+#endif
+
+ return v;
+}
+
}
NativeInfoPtr
@@ -131,12 +172,18 @@ IceWS::TransceiverI::getNativeInfo()
return _delegate->getNativeInfo();
}
-#ifdef ICE_USE_IOCP
+#if defined(ICE_USE_IOCP)
AsyncInfo*
IceWS::TransceiverI::getAsyncInfo(SocketOperation status)
{
return _delegate->getNativeInfo()->getAsyncInfo(status);
}
+#elif defined(ICE_OS_WINRT)
+void
+IceWS::TransceiverI::setCompletedHandler(IceInternal::SocketOperationCompletedHandler^ handler)
+{
+ _delegate->getNativeInfo()->setCompletedHandler(handler);
+}
#endif
SocketOperation
@@ -539,7 +586,7 @@ IceWS::TransceiverI::read(Buffer& buf, bool& hasMoreData)
return s;
}
-#ifdef ICE_USE_IOCP
+#if defined(ICE_USE_IOCP) || defined(ICE_OS_WINRT)
bool
IceWS::TransceiverI::startWrite(Buffer& buf)
{
@@ -552,7 +599,7 @@ IceWS::TransceiverI::startWrite(Buffer& buf)
}
else
{
- return _delegate->startWrite(buf);
+ return _delegate->startWrite(_writeBuffer);
}
}