diff options
author | Benoit Foucher <benoit@zeroc.com> | 2016-05-31 08:59:20 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2016-05-31 08:59:20 +0200 |
commit | 9f99bad130508d529814c778852621f6a1b814cc (patch) | |
tree | 4fa8328539c80f719cca38a0fb7f67b2995618fc /cpp/src/Ice/ios/StreamConnector.cpp | |
parent | PHP 7 fix for printing Exception info (diff) | |
download | ice-9f99bad130508d529814c778852621f6a1b814cc.tar.bz2 ice-9f99bad130508d529814c778852621f6a1b814cc.tar.xz ice-9f99bad130508d529814c778852621f6a1b814cc.zip |
Added support for building Xcode SDK, added iAP transport
Diffstat (limited to 'cpp/src/Ice/ios/StreamConnector.cpp')
-rw-r--r-- | cpp/src/Ice/ios/StreamConnector.cpp | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/cpp/src/Ice/ios/StreamConnector.cpp b/cpp/src/Ice/ios/StreamConnector.cpp new file mode 100644 index 00000000000..a5b87b07db0 --- /dev/null +++ b/cpp/src/Ice/ios/StreamConnector.cpp @@ -0,0 +1,169 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved. +// +// This copy of Ice Touch is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include "StreamTransceiver.h" +#include "StreamEndpointI.h" +#include "StreamConnector.h" + +#include <Ice/Network.h> +#include <Ice/Exception.h> +#include <Ice/Properties.h> +#include <Ice/NetworkProxy.h> + +#include <CoreFoundation/CoreFoundation.h> + +using namespace std; +using namespace Ice; +using namespace IceInternal; + +TransceiverPtr +IceObjC::StreamConnector::connect() +{ + CFReadStreamRef readStream = nil; + CFWriteStreamRef writeStream = nil; + try + { + CFStringRef h = CFStringCreateWithCString(NULL, _host.c_str(), kCFStringEncodingUTF8); + CFHostRef host = CFHostCreateWithName(NULL, h); + CFRelease(h); + CFStreamCreatePairWithSocketToCFHost(NULL, host, _port, &readStream, &writeStream); + CFRelease(host); + + _instance->setupStreams(readStream, writeStream, false, _host); + return new StreamTransceiver(_instance, readStream, writeStream, _host, _port); + } + catch(const Ice::LocalException& ex) + { + if(readStream) + { + CFRelease(readStream); + } + if(writeStream) + { + CFRelease(writeStream); + } + throw; + } +} + +Short +IceObjC::StreamConnector::type() const +{ + return _instance->type(); +} + +string +IceObjC::StreamConnector::toString() const +{ + string proxyHost = _instance->proxyHost(); + ostringstream os; + if(!proxyHost.empty()) + { + os << proxyHost << ":" << _instance->proxyPort(); + } + else + { + os << _host << ":" << _port; + } + return os.str(); +} + +bool +IceObjC::StreamConnector::operator==(const IceInternal::Connector& r) const +{ + const StreamConnector* p = dynamic_cast<const StreamConnector*>(&r); + if(!p) + { + return false; + } + + if(_timeout != p->_timeout) + { + return false; + } + + if(_connectionId != p->_connectionId) + { + return false; + } + + if(_host != p->_host) + { + return false; + } + + if(_port != p->_port) + { + return false; + } + + return true; +} + +bool +IceObjC::StreamConnector::operator!=(const IceInternal::Connector& r) const +{ + return !operator==(r); +} + +bool +IceObjC::StreamConnector::operator<(const IceInternal::Connector& r) const +{ + const StreamConnector* p = dynamic_cast<const StreamConnector*>(&r); + if(!p) + { + return type() < r.type(); + } + + if(_timeout < p->_timeout) + { + return true; + } + else if(p->_timeout < _timeout) + { + return false; + } + + if(_connectionId < p->_connectionId) + { + return true; + } + else if(p->_connectionId < _connectionId) + { + return false; + } + + if(_host < p->_host) + { + return true; + } + else if(p->_host < _host) + { + return false; + } + + return _port < p->_port; +} + +IceObjC::StreamConnector::StreamConnector(const InstancePtr& instance, + const string& host, + Ice::Int port, + Ice::Int timeout, + const string& connectionId) : + _instance(instance), + _host(host.empty() ? string("127.0.0.1") : host), + _port(port), + _timeout(timeout), + _connectionId(connectionId) +{ +} + +IceObjC::StreamConnector::~StreamConnector() +{ +} |