summaryrefslogtreecommitdiff
path: root/cpp/src/IceBT/StreamSocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceBT/StreamSocket.cpp')
-rw-r--r--cpp/src/IceBT/StreamSocket.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/cpp/src/IceBT/StreamSocket.cpp b/cpp/src/IceBT/StreamSocket.cpp
index 9f8e621bead..3d241f7eb7d 100644
--- a/cpp/src/IceBT/StreamSocket.cpp
+++ b/cpp/src/IceBT/StreamSocket.cpp
@@ -19,9 +19,24 @@ using namespace std;
using namespace Ice;
using namespace IceBT;
+IceBT::StreamSocket::StreamSocket(const InstancePtr& instance, const SocketAddress& addr) :
+ IceInternal::NativeInfo(createSocket()),
+ _instance(instance),
+ _addr(addr),
+ _state(StateNeedConnect)
+{
+ init();
+ if(doConnect(_fd, _addr))
+ {
+ _state = StateConnected;
+ }
+ _desc = fdToString(_fd);
+}
+
IceBT::StreamSocket::StreamSocket(const InstancePtr& instance, SOCKET fd) :
IceInternal::NativeInfo(fd),
- _instance(instance)
+ _instance(instance),
+ _state(StateConnected)
{
init();
_desc = fdToString(fd);
@@ -32,6 +47,31 @@ IceBT::StreamSocket::~StreamSocket()
assert(_fd == INVALID_SOCKET);
}
+IceInternal::SocketOperation
+IceBT::StreamSocket::connect(IceInternal::Buffer& readBuffer, IceInternal::Buffer& writeBuffer)
+{
+ if(_state == StateNeedConnect)
+ {
+ _state = StateConnectPending;
+ return IceInternal::SocketOperationConnect;
+ }
+ else if(_state <= StateConnectPending)
+ {
+ doFinishConnect(_fd);
+ _desc = fdToString(_fd);
+ _state = StateConnected;
+ }
+
+ assert(_state == StateConnected);
+ return IceInternal::SocketOperationNone;
+}
+
+bool
+IceBT::StreamSocket::isConnected()
+{
+ return _state == StateConnected;
+}
+
size_t
IceBT::StreamSocket::getSendPacketSize(size_t length)
{