diff options
120 files changed, 1062 insertions, 150 deletions
diff --git a/config/PropertyNames.xml b/config/PropertyNames.xml index 9ecfc0963c5..c7992e322e6 100644 --- a/config/PropertyNames.xml +++ b/config/PropertyNames.xml @@ -406,6 +406,7 @@ generated from the section label. <property name="Warn.UnusedProperties" /> <property name="CacheMessageBuffers" /> <property name="ThreadInterruptSafe" /> + <property name="Voip" /> </section> <section name="IceMX"> diff --git a/config/makedepend.py b/config/makedepend.py index 7f3c27c776b..aa8bdbcd7b6 100755 --- a/config/makedepend.py +++ b/config/makedepend.py @@ -10,20 +10,10 @@ import sys, os, fileinput -for top_srcdir in [".", "..", "../..", "../../..", "../../../.."]: - top_srcdir = os.path.normpath(top_srcdir) - if os.path.exists(os.path.join(top_srcdir, "..", "config", "makedepend.py")): - break -else: - raise RuntimeError("can't find top level source directory!") - - prefix = None - if len(sys.argv) > 1: prefix = sys.argv[1] - lang = None for line in fileinput.input("-"): line = line.strip() diff --git a/cpp/allTests.py b/cpp/allTests.py index 320fad1ae73..8b01519b97c 100755 --- a/cpp/allTests.py +++ b/cpp/allTests.py @@ -77,6 +77,7 @@ tests = [ ("Ice/enums", ["once"]), ("Ice/logger", ["once"]), ("Ice/networkProxy", ["core", "noipv6", "nosocks"]), + ("Ice/services", ["once"]), ("IceSSL/configuration", ["once", "novalgrind"]), # valgrind doesn't work well with openssl ("IceBox/configuration", ["core", "noipv6", "novc100", "nomingw", "nomx"]), ("IceBox/admin", ["core", "noipv6", "novc100", "nomingw", "nomx"]), diff --git a/cpp/config/Makefile b/cpp/config/Makefile index a3a32873919..9e6d7fa64a1 100644 --- a/cpp/config/Makefile +++ b/cpp/config/Makefile @@ -12,7 +12,6 @@ top_srcdir = .. include $(top_srcdir)/config/Make.rules all:: - echo "" install:: $(call installdata,templates.xml,$(DESTDIR)$(install_configdir)) diff --git a/cpp/include/Glacier2/Glacier2.h b/cpp/include/Glacier2/Glacier2.h index 958dd83ae1b..4cb1f6287bc 100644 --- a/cpp/include/Glacier2/Glacier2.h +++ b/cpp/include/Glacier2/Glacier2.h @@ -16,7 +16,7 @@ #include <Glacier2/Session.h> #include <Glacier2/PermissionsVerifier.h> #include <Glacier2/Metrics.h> -#ifndef ICE_OS_WINRT +#if (!defined(__APPLE__) || TARGET_OS_IPHONE == 0) && !defined(ICE_OS_WINRT) # include <Glacier2/Application.h> #endif #include <Glacier2/SessionHelper.h> diff --git a/cpp/include/Ice/Ice.h b/cpp/include/Ice/Ice.h index a0e897e50e2..fe62daf80c8 100644 --- a/cpp/include/Ice/Ice.h +++ b/cpp/include/Ice/Ice.h @@ -31,7 +31,7 @@ #include <Ice/OutgoingAsync.h> #include <Ice/IncomingAsync.h> #include <Ice/Process.h> -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && (!defined(__APPLE__) || TARGET_OS_IPHONE == 0) # include <Ice/Application.h> #endif #include <Ice/Connection.h> @@ -46,7 +46,7 @@ #include <Ice/NativePropertiesAdmin.h> #include <Ice/Instrumentation.h> #include <Ice/Metrics.h> -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && (!defined(__APPLE__) || TARGET_OS_IPHONE == 0) # include <Ice/Service.h> #endif #include <IceUtil/PopDisableWarnings.h> diff --git a/cpp/include/IceSSL/IceSSL.h b/cpp/include/IceSSL/IceSSL.h index 07efc48f331..46e65163807 100644 --- a/cpp/include/IceSSL/IceSSL.h +++ b/cpp/include/IceSSL/IceSSL.h @@ -12,7 +12,7 @@ #include <IceUtil/PushDisableWarnings.h> #include <IceUtil/Config.h> -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && (!defined(__APPLE__) || TARGET_OS_IPHONE == 0) # include <IceSSL/Plugin.h> #endif #include <IceSSL/EndpointInfo.h> diff --git a/cpp/include/IceUtil/Config.h b/cpp/include/IceUtil/Config.h index 011ffe874f3..b1403509b48 100644 --- a/cpp/include/IceUtil/Config.h +++ b/cpp/include/IceUtil/Config.h @@ -22,7 +22,7 @@ #if defined(__i386) || defined(_M_IX86) || defined(__x86_64) || \ defined(_M_X64) || defined(_M_IA64) || defined(__alpha__) || \ - defined(__ARMEL__) || defined(_M_ARM_FP) || \ + defined(__ARMEL__) || defined(_M_ARM_FP) || defined(__arm64) || \ defined(__MIPSEL__) || (defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN)) # define ICE_LITTLE_ENDIAN #elif defined(__sparc) || defined(__sparc__) || defined(__hppa) || \ @@ -170,6 +170,10 @@ # include <errno.h> #endif +#ifdef __APPLE__ +# include <TargetConditionals.h> +#endif + #if defined(_MSC_VER) && !defined(ICE_NO_PRAGMA_COMMENT) # if !defined(ICE_STATIC_LIBS) && (!defined(_DLL) || !defined(_MT)) # error "Only multi-threaded DLL libraries can be used with Ice!" diff --git a/cpp/include/IceUtil/IceUtil.h b/cpp/include/IceUtil/IceUtil.h index 2e8dae16be5..f0c91dc095a 100644 --- a/cpp/include/IceUtil/IceUtil.h +++ b/cpp/include/IceUtil/IceUtil.h @@ -21,7 +21,7 @@ #include <IceUtil/AbstractMutex.h> #include <IceUtil/Cache.h> #include <IceUtil/Cond.h> -#ifndef ICE_OS_WINRT +#if !defined(__APPLE__) && !defined(ICE_OS_WINRT) # include <IceUtil/CtrlCHandler.h> #endif #include <IceUtil/Exception.h> diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp index cfcef92d9bc..ec04336d76c 100644 --- a/cpp/src/Ice/ConnectionFactory.cpp +++ b/cpp/src/Ice/ConnectionFactory.cpp @@ -28,6 +28,16 @@ #include <IceUtil/Random.h> #include <iterator> +#if TARGET_OS_IPHONE != 0 +namespace IceInternal +{ + +bool registerForBackgroundNotification(IceInternal::IncomingConnectionFactory*); +void unregisterForBackgroundNotification(IceInternal::IncomingConnectionFactory*); + +} +#endif + using namespace std; using namespace Ice; using namespace Ice::Instrumentation; @@ -1361,6 +1371,23 @@ void IceInternal::IncomingConnectionFactory::finished(ThreadPoolCurrent&, bool close) { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + +#if TARGET_OS_IPHONE != 0 + if(_state < StateClosed) + { + // + // Finished has been called by stopAcceptor if the state isn't + // closed. + // + if(_acceptorStarted && close) + { + _acceptorStarted = false; + closeAcceptor(); + } + return; + } +#endif + assert(_state == StateClosed); setState(StateFinished); @@ -1368,6 +1395,11 @@ IceInternal::IncomingConnectionFactory::finished(ThreadPoolCurrent&, bool close) { closeAcceptor(); } + +#if TARGET_OS_IPHONE != 0 + sync.release(); + unregisterForBackgroundNotification(this); +#endif } string @@ -1441,6 +1473,48 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance { } +#if TARGET_OS_IPHONE != 0 +void +IceInternal::IncomingConnectionFactory::startAcceptor() +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_state >= StateClosed || _acceptorStarted) + { + return; + } + + try + { + createAcceptor(); + _acceptorStarted = true; + } + catch(const Ice::Exception& ex) + { + if(_warn) + { + Warning out(_instance->initializationData().logger); + out << "unable to create acceptor:\n" << ex; + } + } +} + +void +IceInternal::IncomingConnectionFactory::stopAcceptor() +{ + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); + if(_state >= StateClosed || !_acceptorStarted) + { + return; + } + + if(_adapter->getThreadPool()->finish(this, true)) + { + _acceptorStarted = false; + closeAcceptor(); + } +} +#endif + void IceInternal::IncomingConnectionFactory::initialize() { @@ -1473,7 +1547,16 @@ IceInternal::IncomingConnectionFactory::initialize() } else { +#if TARGET_OS_IPHONE != 0 + // + // The notification center will call back on the factory to + // start the acceptor if necessary. + // + _acceptorStarted = false; + registerForBackgroundNotification(this); +#else createAcceptor(); +#endif } } catch(const Ice::Exception&) diff --git a/cpp/src/Ice/ConnectionFactory.h b/cpp/src/Ice/ConnectionFactory.h index b6429b80e7f..bf211972ec8 100644 --- a/cpp/src/Ice/ConnectionFactory.h +++ b/cpp/src/Ice/ConnectionFactory.h @@ -170,6 +170,11 @@ public: void hold(); void destroy(); +#if TARGET_OS_IPHONE != 0 + void startAcceptor(); + void stopAcceptor(); +#endif + void updateConnectionObservers(); void waitUntilHolding() const; @@ -223,6 +228,10 @@ private: const TransceiverPtr _transceiver; EndpointIPtr _endpoint; +#if TARGET_OS_IPHONE != 0 + bool _acceptorStarted; +#endif + Ice::ObjectAdapterIPtr _adapter; const bool _warn; diff --git a/cpp/src/Ice/ConnectionI.h b/cpp/src/Ice/ConnectionI.h index aeedf315342..fdb80901122 100644 --- a/cpp/src/Ice/ConnectionI.h +++ b/cpp/src/Ice/ConnectionI.h @@ -41,7 +41,7 @@ #include <deque> -#if !defined(ICE_OS_WINRT) +#if TARGET_OS_IPHONE == 0 && !defined(ICE_OS_WINRT) # ifndef ICE_HAS_BZIP2 # define ICE_HAS_BZIP2 # endif @@ -275,9 +275,11 @@ private: void doCompress(IceInternal::BasicStream&, IceInternal::BasicStream&); void doUncompress(IceInternal::BasicStream&, IceInternal::BasicStream&); #endif + IceInternal::SocketOperation parseMessage(IceInternal::BasicStream&, Int&, Int&, Byte&, IceInternal::ServantManagerPtr&, ObjectAdapterPtr&, IceInternal::OutgoingAsyncBasePtr&, ConnectionCallbackPtr&, int&); + void invokeAll(IceInternal::BasicStream&, Int, Int, Byte, const IceInternal::ServantManagerPtr&, const ObjectAdapterPtr&); diff --git a/cpp/src/Ice/EventHandler.h b/cpp/src/Ice/EventHandler.h index 8ae656a0859..afbd608b961 100644 --- a/cpp/src/Ice/EventHandler.h +++ b/cpp/src/Ice/EventHandler.h @@ -71,6 +71,9 @@ protected: friend class ThreadPool; friend class ThreadPoolCurrent; friend class Selector; +#ifdef ICE_USE_CFSTREAM + friend class EventHandlerWrapper; +#endif }; } diff --git a/cpp/src/Ice/Exception.cpp b/cpp/src/Ice/Exception.cpp index 2b1015a5d7b..16c3a3addaa 100644 --- a/cpp/src/Ice/Exception.cpp +++ b/cpp/src/Ice/Exception.cpp @@ -830,3 +830,12 @@ Ice::ResponseSentException::ice_print(ostream& out) const Exception::ice_print(out); out << ":\nresponse sent exception"; } + +#ifdef ICE_USE_CFSTREAM +void +Ice::CFNetworkException::ice_print(ostream& out) const +{ + Exception::ice_print(out); + out << ":\nnetwork exception: domain: " << domain << " error: " << error; +} +#endif diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h index a731a49db3d..f90e3d6da61 100644 --- a/cpp/src/Ice/Network.h +++ b/cpp/src/Ice/Network.h @@ -45,8 +45,10 @@ typedef int ssize_t; #if defined(__linux) && !defined(ICE_NO_EPOLL) # define ICE_USE_EPOLL 1 -#elif (defined(__APPLE__) || defined(__FreeBSD__)) && !defined(ICE_NO_KQUEUE) +#elif (defined(__APPLE__) || defined(__FreeBSD__)) && TARGET_OS_IPHONE == 0 && !defined(ICE_NO_KQUEUE) # define ICE_USE_KQUEUE 1 +#elif defined(__APPLE__) && !defined(ICE_NO_CFSTREAM) +# define ICE_USE_CFSTREAM 1 #elif defined(_WIN32) # if defined(ICE_OS_WINRT) # elif !defined(ICE_NO_IOCP) @@ -142,7 +144,11 @@ enum SocketOperation // With BSD sockets, write and connect readiness are the same so // we use the same value for both. SocketOperationWrite = 2, +#ifdef ICE_USE_CFSTREAM + SocketOperationConnect = 4 +#else SocketOperationConnect = 2 +#endif }; // diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp index 3bcf9effd32..95cf61169a8 100644 --- a/cpp/src/Ice/PropertyNames.cpp +++ b/cpp/src/Ice/PropertyNames.cpp @@ -6,7 +6,7 @@ // ICE_LICENSE file included in this distribution. // // ********************************************************************** -// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Dec 9 12:08:30 2014 +// Generated by makeprops.py from file ./config/PropertyNames.xml, Thu Mar 19 17:54:51 2015 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -186,6 +186,7 @@ const IceInternal::Property IcePropsData[] = IceInternal::Property("Ice.Warn.UnusedProperties", false, 0), IceInternal::Property("Ice.CacheMessageBuffers", false, 0), IceInternal::Property("Ice.ThreadInterruptSafe", false, 0), + IceInternal::Property("Ice.Voip", false, 0), }; const IceInternal::PropertyArray diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h index 37b0a8ee4e4..28b47265af6 100644 --- a/cpp/src/Ice/PropertyNames.h +++ b/cpp/src/Ice/PropertyNames.h @@ -6,7 +6,7 @@ // ICE_LICENSE file included in this distribution. // // ********************************************************************** -// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Dec 9 12:08:30 2014 +// Generated by makeprops.py from file ./config/PropertyNames.xml, Thu Mar 19 17:54:51 2015 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp index 07f755276cb..39f411fb115 100644 --- a/cpp/src/Ice/Selector.cpp +++ b/cpp/src/Ice/Selector.cpp @@ -14,6 +14,11 @@ #include <Ice/LocalException.h> #include <IceUtil/Time.h> +#ifdef ICE_USE_CFSTREAM +# include <CoreFoundation/CoreFoundation.h> +# include <CoreFoundation/CFStream.h> +#endif + using namespace std; using namespace IceInternal; @@ -519,6 +524,480 @@ Selector::select(vector<pair<EventHandler*, SocketOperation> >& handlers, int ti } } +#elif defined(ICE_USE_CFSTREAM) + +namespace +{ + +void selectorInterrupt(void* info) +{ + reinterpret_cast<Selector*>(info)->processInterrupt(); +} + +void eventHandlerSocketCallback(CFSocketRef, CFSocketCallBackType callbackType, CFDataRef, const void* d, void* info) +{ + if(callbackType == kCFSocketReadCallBack) + { + reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationRead); + } + else if(callbackType == kCFSocketWriteCallBack) + { + reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationWrite); + } + else if(callbackType == kCFSocketConnectCallBack) + { + reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationConnect, + d ? *reinterpret_cast<const SInt32*>(d) : 0); + } +} + +class SelectorHelperThread : public IceUtil::Thread +{ +public: + + SelectorHelperThread(Selector& selector) : _selector(selector) + { + } + + virtual void run() + { + _selector.run(); + } + +private: + + Selector& _selector; +}; + +CFOptionFlags +toCFCallbacks(SocketOperation op) +{ + CFOptionFlags cbs = 0; + if(op & SocketOperationRead) + { + cbs |= kCFSocketReadCallBack; + } + if(op & SocketOperationWrite) + { + cbs |= kCFSocketWriteCallBack; + } + if(op & SocketOperationConnect) + { + cbs |= kCFSocketConnectCallBack; + } + return cbs; +} + +} + +EventHandlerWrapper::EventHandlerWrapper(const EventHandlerPtr& handler, Selector& selector) : + _handler(handler), + _nativeInfo(StreamNativeInfoPtr::dynamicCast(handler->getNativeInfo())), + _selector(selector), + _ready(SocketOperationNone), + _finish(false) +{ + if(!StreamNativeInfoPtr::dynamicCast(handler->getNativeInfo())) + { + SOCKET fd = handler->getNativeInfo()->fd(); + CFSocketContext ctx = { 0, this, 0, 0, 0 }; + _socket = CFSocketCreateWithNative(kCFAllocatorDefault, + fd, + kCFSocketReadCallBack | + kCFSocketWriteCallBack | + kCFSocketConnectCallBack, + eventHandlerSocketCallback, + &ctx); + + // Disable automatic re-enabling of callbacks and closing of the native socket. + CFSocketSetSocketFlags(_socket, 0); + CFSocketDisableCallBacks(_socket, kCFSocketReadCallBack | kCFSocketWriteCallBack | kCFSocketConnectCallBack); + _source = CFSocketCreateRunLoopSource(kCFAllocatorDefault, _socket, 0); + } + else + { + _socket = 0; + _source = 0; + _nativeInfo->initStreams(this); + } +} + +EventHandlerWrapper::~EventHandlerWrapper() +{ + if(_socket) + { + CFRelease(_socket); + CFRelease(_source); + } +} + +void +EventHandlerWrapper::updateRunLoop() +{ + SocketOperation op = _handler->_registered; + assert(!op || !_finish); + + if(_socket) + { + CFSocketDisableCallBacks(_socket, kCFSocketReadCallBack | kCFSocketWriteCallBack | kCFSocketConnectCallBack); + if(op) + { + CFSocketEnableCallBacks(_socket, toCFCallbacks(op)); + } + + if(op && !CFRunLoopContainsSource(CFRunLoopGetCurrent(), _source, kCFRunLoopDefaultMode)) + { + CFRunLoopAddSource(CFRunLoopGetCurrent(), _source, kCFRunLoopDefaultMode); + } + else if(!op && CFRunLoopContainsSource(CFRunLoopGetCurrent(), _source, kCFRunLoopDefaultMode)) + { + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), _source, kCFRunLoopDefaultMode); + } + + if(_finish) + { + CFSocketInvalidate(_socket); + } + } + else + { + SocketOperation readyOp = _nativeInfo->registerWithRunLoop(op); + if(!(op & (SocketOperationWrite | SocketOperationConnect)) || _ready & SocketOperationWrite) + { + _nativeInfo->unregisterFromRunLoop(SocketOperationWrite, false); + } + + if(!(op & (SocketOperationRead | SocketOperationConnect)) || _ready & SocketOperationRead) + { + _nativeInfo->unregisterFromRunLoop(SocketOperationRead, false); + } + + if(readyOp) + { + ready(readyOp, 0); + } + + if(_finish) + { + _nativeInfo->closeStreams(); + } + } +} + +void +EventHandlerWrapper::readyCallback(SocketOperation op, int error) +{ + _selector.ready(this, op, error); +} + +void +EventHandlerWrapper::ready(SocketOperation op, int error) +{ + if(!_socket) + { + // + // Unregister the stream from the runloop as soon as we got the callback. This is + // required to allow thread pool thread to perform read/write operations on the + // stream (which can't be used from another thread than the run loop thread if + // it's registered with a run loop). + // + op = _nativeInfo->unregisterFromRunLoop(op, error != 0); + } + + op = static_cast<SocketOperation>(_handler->_registered & op); + if(!op || _ready & op) + { + return; + } + + if(_socket) + { + if(op & SocketOperationConnect) + { + _nativeInfo->setConnectError(error); + } + } + + _ready = static_cast<SocketOperation>(_ready | op); + if(!(_handler->_disabled & op)) + { + _selector.addReadyHandler(this); + } +} + +void +EventHandlerWrapper::checkReady() +{ + if(_ready & _handler->_registered) + { + _selector.addReadyHandler(this); + } +} + +SocketOperation +EventHandlerWrapper::readyOp() +{ + assert(!(~_handler->_registered & _ready)); + SocketOperation op = static_cast<SocketOperation>(~_handler->_disabled & _ready); + _ready = static_cast<SocketOperation>(~op & _ready); + return op; +} + +bool +EventHandlerWrapper::update(SocketOperation remove, SocketOperation add) +{ + SocketOperation previous = _handler->_registered; + _handler->_registered = static_cast<SocketOperation>(_handler->_registered & ~remove); + _handler->_registered = static_cast<SocketOperation>(_handler->_registered | add); + if(previous == _handler->_registered) + { + return false; + } + + // Clear ready flags which might not be valid anymore. + _ready = static_cast<SocketOperation>(_ready & _handler->_registered); + return true; +} + +void +EventHandlerWrapper::finish() +{ + _finish = true; + _ready = SocketOperationNone; + _handler->_registered = SocketOperationNone; +} + +Selector::Selector(const InstancePtr& instance) : _instance(instance), _destroyed(false) +{ + CFRunLoopSourceContext ctx; + memset(&ctx, 0, sizeof(CFRunLoopSourceContext)); + ctx.info = this; + ctx.perform = selectorInterrupt; + _source = CFRunLoopSourceCreate(0, 0, &ctx); + _runLoop = 0; + + _thread = new SelectorHelperThread(*this); + _thread->start(); + + Lock sync(*this); + while(!_runLoop) + { + wait(); + } +} + +Selector::~Selector() +{ +} + +void +Selector::destroy() +{ + Lock sync(*this); + + // + // Make sure any pending changes are processed to ensure remaining + // streams/sockets are closed. + // + _destroyed = true; + while(!_changes.empty()) + { + CFRunLoopSourceSignal(_source); + CFRunLoopWakeUp(_runLoop); + + wait(); + } + + _thread->getThreadControl().join(); + _thread = 0; + + CFRelease(_source); + + assert(_wrappers.empty()); + _readyHandlers.clear(); + _selectedHandlers.clear(); +} + +void +Selector::initialize(EventHandler* handler) +{ + Lock sync(*this); + _wrappers[handler] = new EventHandlerWrapper(handler, *this); +} + +void +Selector::update(EventHandler* handler, SocketOperation remove, SocketOperation add) +{ + Lock sync(*this); + const EventHandlerWrapperPtr& wrapper = _wrappers[handler]; + assert(wrapper); + if(wrapper->update(remove, add)) + { + _changes.insert(wrapper); + notify(); + } +} + +void +Selector::enable(EventHandler* handler, SocketOperation op) +{ + Lock sync(*this); + if(!(handler->_disabled & op)) + { + return; + } + handler->_disabled = static_cast<SocketOperation>(handler->_disabled & ~op); + + if(handler->_registered & op) + { + _wrappers[handler]->checkReady(); + } +} + +void +Selector::disable(EventHandler* handler, SocketOperation op) +{ + Lock sync(*this); + if(handler->_disabled & op) + { + return; + } + handler->_disabled = static_cast<SocketOperation>(handler->_disabled | op); +} + +bool +Selector::finish(EventHandler* handler, bool closeNow) +{ + Lock sync(*this); + std::map<EventHandler*, EventHandlerWrapperPtr>::iterator p = _wrappers.find(handler); + assert(p != _wrappers.end()); + EventHandlerWrapperPtr wrapper = p->second; + wrapper->finish(); + _wrappers.erase(p); + _changes.insert(wrapper); + notify(); + return closeNow; +} + +void +Selector::select(std::vector<std::pair<EventHandler*, SocketOperation> >& handlers, int timeout) +{ + Lock sync(*this); + + // + // Re-enable callbacks for previously selected handlers. + // + if(!_selectedHandlers.empty()) + { + vector<pair<EventHandlerWrapperPtr, SocketOperation> >::const_iterator p; + for(p = _selectedHandlers.begin(); p != _selectedHandlers.end(); ++p) + { + if(!p->first->_finish) + { + _changes.insert(p->first); + } + } + _selectedHandlers.clear(); + } + + // + // Wait for handlers to be ready. + // + handlers.clear(); + while(_selectedHandlers.empty()) + { + while(!_changes.empty()) + { + CFRunLoopSourceSignal(_source); + CFRunLoopWakeUp(_runLoop); + + wait(); + } + + if(_readyHandlers.empty()) + { + if(timeout > 0) + { + if(!timedWait(IceUtil::Time::seconds(timeout))) + { + break; + } + } + else + { + wait(); + } + } + + if(!_changes.empty()) + { + continue; // Make sure to process the changes first. + } + + for(vector<EventHandlerWrapperPtr>::const_iterator p = _readyHandlers.begin(); p != _readyHandlers.end(); ++p) + { + SocketOperation op = (*p)->readyOp(); + if(op) + { + _selectedHandlers.push_back(pair<EventHandlerWrapperPtr, SocketOperation>(*p, op)); + handlers.push_back(pair<EventHandler*, SocketOperation>((*p)->_handler.get(), op)); + } + } + _readyHandlers.clear(); + } +} + +void +Selector::processInterrupt() +{ + Lock sync(*this); + if(!_changes.empty()) + { + for(set<EventHandlerWrapperPtr>::const_iterator p = _changes.begin(); p != _changes.end(); ++p) + { + (*p)->updateRunLoop(); + } + _changes.clear(); + notify(); + } + if(_destroyed) + { + CFRunLoopStop(_runLoop); + } +} + +void +Selector::ready(EventHandlerWrapper* wrapper, SocketOperation op, int error) +{ + Lock sync(*this); + wrapper->ready(op, error); +} + +void +Selector::addReadyHandler(EventHandlerWrapper* wrapper) +{ + // Called from ready() + _readyHandlers.push_back(wrapper); + if(_readyHandlers.size() == 1) + { + notify(); + } +} + +void +Selector::run() +{ + { + Lock sync(*this); + _runLoop = CFRunLoopGetCurrent(); + notify(); + } + + CFRunLoopAddSource(CFRunLoopGetCurrent(), _source, kCFRunLoopDefaultMode); + CFRunLoopRun(); + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), _source, kCFRunLoopDefaultMode); +} + #elif defined(ICE_USE_SELECT) || defined(ICE_USE_POLL) Selector::Selector(const InstancePtr& instance) : _instance(instance), _selecting(false), _interrupted(false) diff --git a/cpp/src/Ice/Selector.h b/cpp/src/Ice/Selector.h index 2e70648bb68..7ca36dee887 100644 --- a/cpp/src/Ice/Selector.h +++ b/cpp/src/Ice/Selector.h @@ -28,6 +28,21 @@ # include <sys/poll.h> #endif +#if defined(ICE_USE_CFSTREAM) +# include <IceUtil/RecMutex.h> +# include <IceUtil/Thread.h> +# include <set> + +struct __CFRunLoop; +typedef struct __CFRunLoop * CFRunLoopRef; + +struct __CFRunLoopSource; +typedef struct __CFRunLoopSource * CFRunLoopSourceRef; + +struct __CFSocket; +typedef struct __CFSocket * CFSocketRef; +#endif + #if defined(ICE_OS_WINRT) # include <deque> #endif @@ -161,6 +176,120 @@ private: int _queueFd; }; +#elif defined(ICE_USE_CFSTREAM) + +class Selector; + +class SelectorReadyCallback : public IceUtil::Shared +{ +public: + + virtual ~SelectorReadyCallback() { } + virtual void readyCallback(SocketOperation, int = 0) = 0; +}; + +class StreamNativeInfo : public NativeInfo +{ +public: + + StreamNativeInfo(SOCKET fd) : NativeInfo(fd), _connectError(0) + { + } + + virtual void initStreams(SelectorReadyCallback*) = 0; + virtual SocketOperation registerWithRunLoop(SocketOperation) = 0; + virtual SocketOperation unregisterFromRunLoop(SocketOperation, bool) = 0; + virtual void closeStreams() = 0; + + void setConnectError(int error) + { + _connectError = error; + } + +private: + + int _connectError; +}; +typedef IceUtil::Handle<StreamNativeInfo> StreamNativeInfoPtr; + +class EventHandlerWrapper : public SelectorReadyCallback +{ +public: + + EventHandlerWrapper(const EventHandlerPtr&, Selector&); + ~EventHandlerWrapper(); + + void updateRunLoop(); + + virtual void readyCallback(SocketOperation, int = 0); + + void ready(SocketOperation, int); + + SocketOperation readyOp(); + void checkReady(); + + bool update(SocketOperation, SocketOperation); + void finish(); + + bool operator<(const EventHandlerWrapper& o) + { + return this < &o; + } + +private: + + friend class Selector; + + EventHandlerPtr _handler; + StreamNativeInfoPtr _nativeInfo; + Selector& _selector; + SocketOperation _ready; + bool _finish; + CFSocketRef _socket; + CFRunLoopSourceRef _source; +}; +typedef IceUtil::Handle<EventHandlerWrapper> EventHandlerWrapperPtr; + +class Selector : IceUtil::Monitor<IceUtil::RecMutex> +{ + +public: + + Selector(const InstancePtr&); + virtual ~Selector(); + + void destroy(); + + void initialize(EventHandler*); + void update(EventHandler*, SocketOperation, SocketOperation); + void enable(EventHandler*, SocketOperation); + void disable(EventHandler*, SocketOperation); + bool finish(EventHandler*, bool); + + void startSelect() { } + void finishSelect() { } + void select(std::vector<std::pair<EventHandler*, SocketOperation> >&, int); + + void processInterrupt(); + void ready(EventHandlerWrapper*, SocketOperation, int = 0); + void addReadyHandler(EventHandlerWrapper*); + void run(); + +private: + + InstancePtr _instance; + IceUtil::ThreadPtr _thread; + CFRunLoopRef _runLoop; + CFRunLoopSourceRef _source; + bool _destroyed; + + std::set<EventHandlerWrapperPtr> _changes; + + std::vector<EventHandlerWrapperPtr> _readyHandlers; + std::vector<std::pair<EventHandlerWrapperPtr, SocketOperation> > _selectedHandlers; + std::map<EventHandler*, EventHandlerWrapperPtr> _wrappers; +}; + #elif defined(ICE_USE_SELECT) || defined(ICE_USE_POLL) class Selector diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 02f1eb94d77..eb030600d1e 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -8,7 +8,7 @@ // ********************************************************************** #include <IceUtil/DisableWarnings.h> -#include <Gen.h> +#include "Gen.h" #include <Slice/Util.h> #include <Slice/CPlusPlusUtil.h> #include <IceUtil/Functional.h> diff --git a/cpp/src/slice2cpp/Main.cpp b/cpp/src/slice2cpp/Main.cpp index 98b0b14d07b..5fa6d6d247d 100644 --- a/cpp/src/slice2cpp/Main.cpp +++ b/cpp/src/slice2cpp/Main.cpp @@ -14,7 +14,7 @@ #include <Slice/Preprocessor.h> #include <Slice/FileTracker.h> #include <Slice/Util.h> -#include <Gen.h> +#include "Gen.h" using namespace std; using namespace Slice; diff --git a/cpp/src/slice2objc/Gen.cpp b/cpp/src/slice2objc/Gen.cpp index 35a8cba1996..a8c6b825ae5 100644 --- a/cpp/src/slice2objc/Gen.cpp +++ b/cpp/src/slice2objc/Gen.cpp @@ -9,7 +9,7 @@ #include <IceUtil/DisableWarnings.h> #include <IceUtil/Functional.h> -#include <Gen.h> +#include "Gen.h" #include <limits> #include <sys/stat.h> #ifndef _WIN32 diff --git a/cpp/src/slice2objc/Main.cpp b/cpp/src/slice2objc/Main.cpp index 91843743c3d..fe9189514a1 100644 --- a/cpp/src/slice2objc/Main.cpp +++ b/cpp/src/slice2objc/Main.cpp @@ -14,7 +14,7 @@ #include <IceUtil/Mutex.h> #include <IceUtil/MutexPtrLock.h> #include <Slice/Util.h> -#include <Gen.h> +#include "Gen.h" using namespace std; using namespace Slice; diff --git a/cpp/test/Ice/Makefile b/cpp/test/Ice/Makefile index 0629ad464bb..37b00f4c76f 100644 --- a/cpp/test/Ice/Makefile +++ b/cpp/test/Ice/Makefile @@ -51,7 +51,8 @@ SUBDIRS = proxy \ enums \ echo \ logger \ - networkProxy + networkProxy \ + services .PHONY: $(EVERYTHING) $(SUBDIRS) diff --git a/cpp/test/Ice/acm/run.py b/cpp/test/Ice/acm/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/acm/run.py +++ b/cpp/test/Ice/acm/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/adapterDeactivation/run.py b/cpp/test/Ice/adapterDeactivation/run.py index 9487c74a4f5..c9767485188 100755 --- a/cpp/test/Ice/adapterDeactivation/run.py +++ b/cpp/test/Ice/adapterDeactivation/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/admin/run.py b/cpp/test/Ice/admin/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/admin/run.py +++ b/cpp/test/Ice/admin/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/ami/run.py b/cpp/test/Ice/ami/run.py index 2307ecfe0a6..0816938a196 100755 --- a/cpp/test/Ice/ami/run.py +++ b/cpp/test/Ice/ami/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/background/run.py b/cpp/test/Ice/background/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/background/run.py +++ b/cpp/test/Ice/background/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/binding/AllTests.cpp b/cpp/test/Ice/binding/AllTests.cpp index 1d2851c6bcc..f9e7323a870 100644 --- a/cpp/test/Ice/binding/AllTests.cpp +++ b/cpp/test/Ice/binding/AllTests.cpp @@ -455,12 +455,33 @@ allTests(const Ice::CommunicatorPtr& communicator) // one after the other. // for(i = 0; i < nRetry && test->getAdapterName() == "Adapter31"; i++); +#if TARGET_OS_IPHONE > 0 + if(i != nRetry) + { + test->ice_getConnection()->close(false); + for(i = 0; i < nRetry && test->getAdapterName() == "Adapter31"; i++); + } +#endif test(i == nRetry); com->deactivateObjectAdapter(adapters[0]); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter32"; i++); +#if TARGET_OS_IPHONE > 0 + if(i != nRetry) + { + test->ice_getConnection()->close(false); + for(i = 0; i < nRetry && test->getAdapterName() == "Adapter32"; i++); + } +#endif test(i == nRetry); com->deactivateObjectAdapter(adapters[1]); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter33"; i++); +#if TARGET_OS_IPHONE > 0 + if(i != nRetry) + { + test->ice_getConnection()->close(false); + for(i = 0; i < nRetry && test->getAdapterName() == "Adapter33"; i++); + } +#endif test(i == nRetry); com->deactivateObjectAdapter(adapters[2]); @@ -482,14 +503,35 @@ allTests(const Ice::CommunicatorPtr& communicator) // adapters.push_back(com->createObjectAdapter("Adapter36", endpoints[2]->toString())); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter36"; i++); +#if TARGET_OS_IPHONE > 0 + if(i != nRetry) + { + test->ice_getConnection()->close(false); + for(i = 0; i < nRetry && test->getAdapterName() == "Adapter36"; i++); + } +#endif test(i == nRetry); test->ice_getConnection()->close(false); adapters.push_back(com->createObjectAdapter("Adapter35", endpoints[1]->toString())); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter35"; i++); +#if TARGET_OS_IPHONE > 0 + if(i != nRetry) + { + test->ice_getConnection()->close(false); + for(i = 0; i < nRetry && test->getAdapterName() == "Adapter35"; i++); + } +#endif test(i == nRetry); test->ice_getConnection()->close(false); adapters.push_back(com->createObjectAdapter("Adapter34", endpoints[0]->toString())); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter34"; i++); +#if TARGET_OS_IPHONE > 0 + if(i != nRetry) + { + test->ice_getConnection()->close(false); + for(i = 0; i < nRetry && test->getAdapterName() == "Adapter34"; i++); + } +#endif test(i == nRetry); deactivate(com, adapters); @@ -614,13 +656,25 @@ allTests(const Ice::CommunicatorPtr& communicator) // one after the other. // for(i = 0; i < nRetry && test->getAdapterName() == "Adapter61"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif com->deactivateObjectAdapter(adapters[0]); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter62"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif com->deactivateObjectAdapter(adapters[1]); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter63"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif com->deactivateObjectAdapter(adapters[2]); try @@ -641,13 +695,25 @@ allTests(const Ice::CommunicatorPtr& communicator) // adapters.push_back(com->createObjectAdapter("Adapter66", endpoints[2]->toString())); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter66"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif adapters.push_back(com->createObjectAdapter("Adapter65", endpoints[1]->toString())); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter65"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif adapters.push_back(com->createObjectAdapter("Adapter64", endpoints[0]->toString())); for(i = 0; i < nRetry && test->getAdapterName() == "Adapter64"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif deactivate(com, adapters); } @@ -673,13 +739,25 @@ allTests(const Ice::CommunicatorPtr& communicator) // one after the other. // for(i = 0; i < nRetry && getAdapterNameWithAMI(test) == "AdapterAMI61"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif com->deactivateObjectAdapter(adapters[0]); for(i = 0; i < nRetry && getAdapterNameWithAMI(test) == "AdapterAMI62"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif com->deactivateObjectAdapter(adapters[1]); for(i = 0; i < nRetry && getAdapterNameWithAMI(test) == "AdapterAMI63"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif com->deactivateObjectAdapter(adapters[2]); try @@ -700,7 +778,11 @@ allTests(const Ice::CommunicatorPtr& communicator) // adapters.push_back(com->createObjectAdapter("AdapterAMI66", endpoints[2]->toString())); for(i = 0; i < nRetry && getAdapterNameWithAMI(test) == "AdapterAMI66"; i++); +#if TARGET_OS_IPHONE > 0 + test(i >= nRetry - 1); // WORKAROUND: for connection establishment hang. +#else test(i == nRetry); +#endif adapters.push_back(com->createObjectAdapter("AdapterAMI65", endpoints[1]->toString())); for(i = 0; i < nRetry && getAdapterNameWithAMI(test) == "AdapterAMI65"; i++); test(i == nRetry); @@ -733,7 +815,8 @@ allTests(const Ice::CommunicatorPtr& communicator) } cout << "ok" << endl; - if(!communicator->getProperties()->getProperty("Ice.Plugin.IceSSL").empty()) + if(!communicator->getProperties()->getProperty("Ice.Plugin.IceSSL").empty() && + communicator->getProperties()->getProperty("Ice.Default.Protocol") == "ssl") { cout << "testing unsecure vs. secure endpoints... " << flush; { diff --git a/cpp/test/Ice/binding/run.py b/cpp/test/Ice/binding/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/binding/run.py +++ b/cpp/test/Ice/binding/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/checksum/run.py b/cpp/test/Ice/checksum/run.py index c9e3019c470..db935718825 100755 --- a/cpp/test/Ice/checksum/run.py +++ b/cpp/test/Ice/checksum/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/custom/run.py b/cpp/test/Ice/custom/run.py index eadac777a2c..6d8f4682523 100755 --- a/cpp/test/Ice/custom/run.py +++ b/cpp/test/Ice/custom/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/defaultServant/run.py b/cpp/test/Ice/defaultServant/run.py index 6e3c798398d..834f7ff9385 100755 --- a/cpp/test/Ice/defaultServant/run.py +++ b/cpp/test/Ice/defaultServant/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/defaultValue/run.py b/cpp/test/Ice/defaultValue/run.py index ecdefe0fbf9..e925f3c7010 100755 --- a/cpp/test/Ice/defaultValue/run.py +++ b/cpp/test/Ice/defaultValue/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/dispatcher/run.py b/cpp/test/Ice/dispatcher/run.py index 2307ecfe0a6..0816938a196 100755 --- a/cpp/test/Ice/dispatcher/run.py +++ b/cpp/test/Ice/dispatcher/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/echo/run.py b/cpp/test/Ice/echo/run.py index 06935984836..ee2384427e0 100755 --- a/cpp/test/Ice/echo/run.py +++ b/cpp/test/Ice/echo/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/enums/run.py b/cpp/test/Ice/enums/run.py index 614bfe363bf..ad8767bd99e 100755 --- a/cpp/test/Ice/enums/run.py +++ b/cpp/test/Ice/enums/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/exceptions/run.py b/cpp/test/Ice/exceptions/run.py index d838c867ba9..b90a1b41d48 100755 --- a/cpp/test/Ice/exceptions/run.py +++ b/cpp/test/Ice/exceptions/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/facets/run.py b/cpp/test/Ice/facets/run.py index 9487c74a4f5..c9767485188 100755 --- a/cpp/test/Ice/facets/run.py +++ b/cpp/test/Ice/facets/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/faultTolerance/run.py b/cpp/test/Ice/faultTolerance/run.py index 5becc9faba0..a709e8a24d2 100755 --- a/cpp/test/Ice/faultTolerance/run.py +++ b/cpp/test/Ice/faultTolerance/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/gc/run.py b/cpp/test/Ice/gc/run.py index 16f8da441e6..9533b681a21 100755 --- a/cpp/test/Ice/gc/run.py +++ b/cpp/test/Ice/gc/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/hash/Client.cpp b/cpp/test/Ice/hash/Client.cpp index 520c1dbe8f5..46fa0170e6b 100644 --- a/cpp/test/Ice/hash/Client.cpp +++ b/cpp/test/Ice/hash/Client.cpp @@ -33,7 +33,7 @@ int main(int argc, char** argv) Ice::InitializationData id; id.properties = Ice::createProperties(argc, argv); -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && TARGET_OS_IPHONE==0 // // In Ice for WinRT IceSSL is part of Ice core. // @@ -47,7 +47,7 @@ int main(int argc, char** argv) ostringstream os; os << i << ":tcp -p " << IceUtilInternal::random(65536) << " -t 10" << IceUtilInternal::random(1000000) << ":udp -p " << IceUtilInternal::random(65536) << " -h " << IceUtilInternal::random(100); - + Ice::ObjectPrx obj = communicator->stringToProxy(os.str()); Ice::EndpointSeq endpoints = obj->ice_getEndpoints(); if(!seenProxy.insert(make_pair(obj->__hash(), obj)).second) @@ -57,7 +57,7 @@ int main(int argc, char** argv) test(obj->__hash() == obj->__hash()); } test(proxyCollisions < maxCollisions); - + // // Check the same proxy produce the same hash, even when we recreate the proxy. // @@ -94,9 +94,9 @@ int main(int argc, char** argv) test( communicator->stringToProxy("Glacier2/router:ssl -p 10011 -t 10000")->__hash() == proxyMap["prx8"]); test( communicator->stringToProxy("Glacier2/router:tcp -h zeroc.com -p 10010 -t 10000")->__hash() == proxyMap["prx9"]); test( communicator->stringToProxy("Glacier2/router:ssl -h zeroc.com -p 10011 -t 10000")->__hash() == proxyMap["prx10"]); - + cerr << "ok" << endl; - + if(communicator) { try diff --git a/cpp/test/Ice/hash/run.py b/cpp/test/Ice/hash/run.py index fde45700ed2..b155d75909d 100755 --- a/cpp/test/Ice/hash/run.py +++ b/cpp/test/Ice/hash/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/hold/run.py b/cpp/test/Ice/hold/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/hold/run.py +++ b/cpp/test/Ice/hold/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/info/run.py b/cpp/test/Ice/info/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/info/run.py +++ b/cpp/test/Ice/info/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/inheritance/run.py b/cpp/test/Ice/inheritance/run.py index 9487c74a4f5..c9767485188 100755 --- a/cpp/test/Ice/inheritance/run.py +++ b/cpp/test/Ice/inheritance/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/interceptor/Client.cpp b/cpp/test/Ice/interceptor/Client.cpp index 79ed9bcc62a..5f25a07f199 100644 --- a/cpp/test/Ice/interceptor/Client.cpp +++ b/cpp/test/Ice/interceptor/Client.cpp @@ -27,7 +27,58 @@ DEFINE_TEST("client") using namespace std; -class Client : public Ice::Application +#ifdef __APPLE__ +namespace +{ + +class App +{ +public: + + ~App() + { + if(_communicator) + { + try + { + _communicator->destroy(); + } + catch(const Ice::Exception& ex) + { + cout << ex << endl; + } + } + } + + Ice::CommunicatorPtr communicator() + { + return _communicator; + } + + virtual int _main(int argc, char** argv) + { + Ice::InitializationData initData; + initData.properties = Ice::createProperties(argc, argv); + initData.properties->setProperty("Ice.Warn.Dispatch", "0"); + _communicator = Ice::initialize(initData); + return run(argc, argv); + } + virtual int run(int argc, char** argv) = 0; + +private: + + Ice::CommunicatorPtr _communicator; +}; + +} +#else +namespace +{ +typedef Ice::Application App; +} +#endif + +class Client : public App { public: @@ -61,7 +112,11 @@ main(int argc, char* argv[]) #endif Client app; +#if __APPLE__ + int result = app._main(argc, argv); +#else int result = app.main(argc, argv); +#endif #ifndef _WIN32 // diff --git a/cpp/test/Ice/interceptor/run.py b/cpp/test/Ice/interceptor/run.py index 4832f30eccd..e7ab1bd2fe0 100755 --- a/cpp/test/Ice/interceptor/run.py +++ b/cpp/test/Ice/interceptor/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/invoke/run.py b/cpp/test/Ice/invoke/run.py index 0e6eb8cb37e..0b5d905d8d5 100755 --- a/cpp/test/Ice/invoke/run.py +++ b/cpp/test/Ice/invoke/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/location/run.py b/cpp/test/Ice/location/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/location/run.py +++ b/cpp/test/Ice/location/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/logger/run.py b/cpp/test/Ice/logger/run.py index 0e50de7df43..f7c35cf1865 100755 --- a/cpp/test/Ice/logger/run.py +++ b/cpp/test/Ice/logger/run.py @@ -11,7 +11,7 @@ import os, sys, subprocess -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/metrics/AllTests.cpp b/cpp/test/Ice/metrics/AllTests.cpp index e7a8ca344f4..3fee13ab968 100644 --- a/cpp/test/Ice/metrics/AllTests.cpp +++ b/cpp/test/Ice/metrics/AllTests.cpp @@ -706,7 +706,7 @@ allTests(const Ice::CommunicatorPtr& communicator, const CommunicatorObserverIPt // Ice doesn't do any endpoint lookup with WinRT, the WinRT // runtime takes care of if. // -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && TARGET_OS_IPHONE==0 cout << "testing endpoint lookup metrics... " << flush; props["IceMX.Metrics.View.Map.ConnectionEstablishment.GroupBy"] = "id"; @@ -1169,7 +1169,7 @@ allTests(const Ice::CommunicatorPtr& communicator, const CommunicatorObserverIPt { test(obsv->connectionObserver->getTotal() > 0); test(obsv->connectionEstablishmentObserver->getTotal() > 0); -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && TARGET_OS_IPHONE==0 test(obsv->endpointLookupObserver->getTotal() > 0); #endif test(obsv->invocationObserver->remoteObserver->getTotal() > 0); @@ -1186,7 +1186,7 @@ allTests(const Ice::CommunicatorPtr& communicator, const CommunicatorObserverIPt { test(obsv->connectionObserver->getCurrent() > 0); test(obsv->connectionEstablishmentObserver->getCurrent() == 0); -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && TARGET_OS_IPHONE==0 test(obsv->endpointLookupObserver->getCurrent() == 0); #endif test(obsv->invocationObserver->remoteObserver->getCurrent() == 0); @@ -1214,7 +1214,7 @@ allTests(const Ice::CommunicatorPtr& communicator, const CommunicatorObserverIPt { test(obsv->connectionObserver->getFailedCount() > 0); test(obsv->connectionEstablishmentObserver->getFailedCount() > 0); -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && TARGET_OS_IPHONE==0 test(obsv->endpointLookupObserver->getFailedCount() > 0); #endif } diff --git a/cpp/test/Ice/metrics/run.py b/cpp/test/Ice/metrics/run.py index eadac777a2c..6d8f4682523 100755 --- a/cpp/test/Ice/metrics/run.py +++ b/cpp/test/Ice/metrics/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/networkProxy/run.py b/cpp/test/Ice/networkProxy/run.py index 143b054256a..9a1726f72ff 100755 --- a/cpp/test/Ice/networkProxy/run.py +++ b/cpp/test/Ice/networkProxy/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/objects/run.py b/cpp/test/Ice/objects/run.py index 9e92332d98b..6014ec1878d 100755 --- a/cpp/test/Ice/objects/run.py +++ b/cpp/test/Ice/objects/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/operations/run.py b/cpp/test/Ice/operations/run.py index 6ad78ab6b8e..996d09d4d36 100755 --- a/cpp/test/Ice/operations/run.py +++ b/cpp/test/Ice/operations/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/optional/run.py b/cpp/test/Ice/optional/run.py index 4a27c40427e..54cbcb67bee 100755 --- a/cpp/test/Ice/optional/run.py +++ b/cpp/test/Ice/optional/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/plugin/run.py b/cpp/test/Ice/plugin/run.py index 0fb29bd2923..e925f3c7010 100755 --- a/cpp/test/Ice/plugin/run.py +++ b/cpp/test/Ice/plugin/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] @@ -22,4 +22,3 @@ import TestUtil client = os.path.join(os.getcwd(), "client") TestUtil.simpleTest(client) - diff --git a/cpp/test/Ice/properties/run.py b/cpp/test/Ice/properties/run.py index 5b79ee8deee..3fc30655f5b 100755 --- a/cpp/test/Ice/properties/run.py +++ b/cpp/test/Ice/properties/run.py @@ -11,7 +11,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/proxy/AllTests.cpp b/cpp/test/Ice/proxy/AllTests.cpp index 7f2752a8196..545dc04037d 100644 --- a/cpp/test/Ice/proxy/AllTests.cpp +++ b/cpp/test/Ice/proxy/AllTests.cpp @@ -984,7 +984,7 @@ allTests(const Ice::CommunicatorPtr& communicator) bool ssl; try { - Ice::ObjectPrx prx = communicator->stringToProxy("dummy:ssl"); + communicator->stringToProxy("dummy:ssl"); ssl = true; } catch(const Ice::EndpointParseException&) diff --git a/cpp/test/Ice/proxy/run.py b/cpp/test/Ice/proxy/run.py index eadac777a2c..6d8f4682523 100755 --- a/cpp/test/Ice/proxy/run.py +++ b/cpp/test/Ice/proxy/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/retry/run.py b/cpp/test/Ice/retry/run.py index 2307ecfe0a6..0816938a196 100755 --- a/cpp/test/Ice/retry/run.py +++ b/cpp/test/Ice/retry/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/servantLocator/run.py b/cpp/test/Ice/servantLocator/run.py index eadac777a2c..6d8f4682523 100755 --- a/cpp/test/Ice/servantLocator/run.py +++ b/cpp/test/Ice/servantLocator/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/slicing/exceptions/run.py b/cpp/test/Ice/slicing/exceptions/run.py index a8b5474de97..526c93a88c2 100755 --- a/cpp/test/Ice/slicing/exceptions/run.py +++ b/cpp/test/Ice/slicing/exceptions/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.."] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../..", "../../../../../.."] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/slicing/objects/run.py b/cpp/test/Ice/slicing/objects/run.py index bf9b7a46a77..7e9990a8753 100755 --- a/cpp/test/Ice/slicing/objects/run.py +++ b/cpp/test/Ice/slicing/objects/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../..", "../../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/stream/run.py b/cpp/test/Ice/stream/run.py index a98fdc69fc8..365a6517aa2 100755 --- a/cpp/test/Ice/stream/run.py +++ b/cpp/test/Ice/stream/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/stringConverter/run.py b/cpp/test/Ice/stringConverter/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/stringConverter/run.py +++ b/cpp/test/Ice/stringConverter/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/threadPoolPriority/run.py b/cpp/test/Ice/threadPoolPriority/run.py index ad87c2a4b24..67a56bb220d 100755 --- a/cpp/test/Ice/threadPoolPriority/run.py +++ b/cpp/test/Ice/threadPoolPriority/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/timeout/AllTests.cpp b/cpp/test/Ice/timeout/AllTests.cpp index c6eec9f62be..8cfa598e86e 100644 --- a/cpp/test/Ice/timeout/AllTests.cpp +++ b/cpp/test/Ice/timeout/AllTests.cpp @@ -296,7 +296,7 @@ allTests(const Ice::CommunicatorPtr& communicator) initData.properties->setProperty("Ice.Override.Timeout", "100"); Ice::CommunicatorPtr comm = Ice::initialize(initData); TimeoutPrx to = TimeoutPrx::checkedCast(comm->stringToProxy(sref)); - timeout->holdAdapter(500); + timeout->holdAdapter(700); try { to->sendData(seq); @@ -306,6 +306,7 @@ allTests(const Ice::CommunicatorPtr& communicator) { // Expected. } + // // Calling ice_timeout() should have no effect. // diff --git a/cpp/test/Ice/timeout/Client.cpp b/cpp/test/Ice/timeout/Client.cpp index 10f59e2d6bd..90b000702aa 100644 --- a/cpp/test/Ice/timeout/Client.cpp +++ b/cpp/test/Ice/timeout/Client.cpp @@ -41,6 +41,14 @@ main(int argc, char* argv[]) // initData.properties->setProperty("Ice.RetryIntervals", "-1"); +#if TARGET_OS_IPHONE != 0 + // + // COMPILERFIX: Disable connect timeout introduced for + // workaround to iOS device hangs when using SSL + // + initData.properties->setProperty("Ice.Override.ConnectTimeout", ""); +#endif + // // This test kills connections, so we don't want warnings. // diff --git a/cpp/test/Ice/timeout/Server.cpp b/cpp/test/Ice/timeout/Server.cpp index b8821afafdd..31da110c400 100644 --- a/cpp/test/Ice/timeout/Server.cpp +++ b/cpp/test/Ice/timeout/Server.cpp @@ -39,6 +39,14 @@ main(int argc, char* argv[]) Ice::InitializationData initData; initData.properties = Ice::createProperties(argc, argv); +#if TARGET_OS_IPHONE != 0 + // + // COMPILERFIX: Disable connect timeout introduced for + // workaround to iOS device hangs when using SSL + // + initData.properties->setProperty("Ice.Override.ConnectTimeout", ""); +#endif + // // This test kills connections, so we don't want warnings. // diff --git a/cpp/test/Ice/timeout/run.py b/cpp/test/Ice/timeout/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/cpp/test/Ice/timeout/run.py +++ b/cpp/test/Ice/timeout/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/Ice/udp/AllTests.cpp b/cpp/test/Ice/udp/AllTests.cpp index ab9099987e3..b741719eef8 100644 --- a/cpp/test/Ice/udp/AllTests.cpp +++ b/cpp/test/Ice/udp/AllTests.cpp @@ -150,7 +150,7 @@ allTests(const CommunicatorPtr& communicator) } base = communicator->stringToProxy("test -d:" + endpoint); TestIntfPrx objMcast = TestIntfPrx::uncheckedCast(base); -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && (!defined(__APPLE__) || (defined(__APPLE__) && !TARGET_OS_IPHONE)) cout << "testing udp multicast... " << flush; nRetry = 5; diff --git a/cpp/test/Ice/udp/Client.cpp b/cpp/test/Ice/udp/Client.cpp index 845ef856ddf..f836ecc1912 100644 --- a/cpp/test/Ice/udp/Client.cpp +++ b/cpp/test/Ice/udp/Client.cpp @@ -69,5 +69,13 @@ main(int argc, char* argv[]) } } +#if TARGET_OS_IPHONE != 0 + // + // iOS WORKAROUND: without a sleep before the communicator + // destroy, the close on the UDP socket hangs. + // + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(500)); +#endif + return status; } diff --git a/cpp/test/Ice/udp/run.py b/cpp/test/Ice/udp/run.py index d648b279327..ddc8c7e76eb 100755 --- a/cpp/test/Ice/udp/run.py +++ b/cpp/test/Ice/udp/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/cpp/test/include/TestCommon.h b/cpp/test/include/TestCommon.h index 87ad90b67d0..2c2cf185673 100644 --- a/cpp/test/include/TestCommon.h +++ b/cpp/test/include/TestCommon.h @@ -11,7 +11,8 @@ #define TEST_COMMON_H #include <IceUtil/IceUtil.h> -#ifdef ICE_OS_WINRT + +#if defined(ICE_OS_WINRT) || (TARGET_OS_IPHONE) # include <Ice/Initialize.h> # include <Ice/Logger.h> # include <Ice/LocalException.h> @@ -19,7 +20,7 @@ #include <cstdlib> -void +void inline print(const std::string& msg) { std::cout << msg << std::flush; @@ -31,7 +32,7 @@ inline println(const std::string& msg) std::cout << msg << std::endl; } -#ifndef ICE_OS_WINRT +#if !defined(ICE_OS_WINRT) && (TARGET_OS_IPHONE == 0) void inline testFailed(const char* expr, const char* file, unsigned int line) @@ -130,10 +131,10 @@ public: { _previousLogger = Ice::getProcessLogger(); Ice::setProcessLogger(Ice::getProcessLogger()->cloneWithPrefix(name)); - + _previousCoutBuffer = std::cout.rdbuf(); std::cout.rdbuf(r); - + _previousCerrBuffer = std::cerr.rdbuf(); std::cerr.rdbuf(r); } @@ -168,7 +169,7 @@ class TestFailedException : public ::Ice::LocalException { public: - TestFailedException(const char* file, int line) : + TestFailedException(const char* file, int line) : LocalException(file, line) { } @@ -213,7 +214,7 @@ inline testFailed(const char* expr, const char* file, unsigned int line) Test::MainHelper* Test::helper; \ Ice::CommunicatorPtr communicatorInstance; \ extern "C" { \ - _declspec(dllexport) void dllTestShutdown(); \ + ICE_DECLSPEC_EXPORT void dllTestShutdown(); \ void dllTestShutdown() \ { \ try \ @@ -224,6 +225,7 @@ inline testFailed(const char* expr, const char* file, unsigned int line) { \ } \ } \ + ICE_DECLSPEC_EXPORT int dllMain(int, char**, Test::MainHelper*); \ int dllMain(int argc, char** argv, Test::MainHelper* helper) \ { \ Test::MainHelperInit init(helper, name, helper->redirect()); \ @@ -239,4 +241,3 @@ inline testFailed(const char* expr, const char* file, unsigned int line) #define test(ex) ((ex) ? ((void)0) : testFailed(#ex, __FILE__, __LINE__)) #endif - diff --git a/objc/allTests.py b/objc/allTests.py index aed2123bba2..51b91ea5ece 100755 --- a/objc/allTests.py +++ b/objc/allTests.py @@ -54,6 +54,7 @@ tests = [ ("Ice/hash", ["core"]), ("Ice/info", ["core", "noipv6", "nocompress"]), ("Ice/enums", ["once"]), + ("Ice/services", ["once"]), ("Ice/acm", ["core"]), ] diff --git a/objc/src/Ice/Exception.mm b/objc/src/Ice/Exception.mm index 916c830e775..97f265c407d 100644 --- a/objc/src/Ice/Exception.mm +++ b/objc/src/Ice/Exception.mm @@ -954,3 +954,24 @@ localExceptionToString(const Ice::LocalException& ex) throw Ice::ResponseSentException(file, line); } @end + +#ifdef ICE_USE_CFSTREAM +@implementation ICECFNetworkException (ICEInternal) +-(id)initWithLocalException:(const Ice::LocalException&)ex +{ + self = [super initWithLocalException:ex]; + if(!self) + { + return nil; + } + NSAssert(dynamic_cast<const Ice::CFNetworkException*>(&ex), @"invalid local exception type"); + const Ice::CFNetworkException& localEx = dynamic_cast<const Ice::CFNetworkException&>(ex); + domain = toNSString(localEx.domain); + return self; +} +-(void) rethrowCxx +{ + throw Ice::CFNetworkException(file, line, fromNSString(domain)); +} +@end +#endif diff --git a/objc/src/Ice/Makefile b/objc/src/Ice/Makefile index d5e86ff783f..5e61fb797a5 100644 --- a/objc/src/Ice/Makefile +++ b/objc/src/Ice/Makefile @@ -86,7 +86,6 @@ include $(top_srcdir)/config/Make.rules CPPFLAGS := -I. -I$(ice_cpp_dir)/include -DICE_API_EXPORTS $(CPPFLAGS) SLICE2OBJCFLAGS := --ice --include-dir objc/Ice --dll-export ICE_API $(SLICE2OBJCFLAGS) -DEPENDFLAGS = --obj-dir LINKWITH := $(BASELIBS) $(libdir)/$(LIBFILENAME): $(OBJS) diff --git a/objc/test/Common/Makefile b/objc/test/Common/Makefile index e3dd3397392..f9051634da0 100644 --- a/objc/test/Common/Makefile +++ b/objc/test/Common/Makefile @@ -16,7 +16,6 @@ TARGETS = ../../lib/$(LIBNAME) OBJS = TestCommon.o SRCS := $(OBJS:.o=.m) -DEPENDFLAGS = --obj-dir include $(top_srcdir)/config/Make.rules @@ -41,4 +40,3 @@ else $(call mkshlib,$@,$(LIBNAME),$(OBJS),$(LIBS)) endif - diff --git a/objc/test/Common/TestCommon.m b/objc/test/Common/TestCommon.m index af5b9b1424d..fad9e6da5e3 100644 --- a/objc/test/Common/TestCommon.m +++ b/objc/test/Common/TestCommon.m @@ -125,8 +125,7 @@ defaultClientProperties(int* argc, char** argv) @"IceSSL.CheckCertName", @"0", @"IceSSL.CertAuthFile", @"cacert.der", @"IceSSL.CertFile", @"c_rsa1024.pfx", - @"IceSSL.Password", @"password", - @"IceSSL.TrustOnly.Client", @"25 9D 03 60 D5 6D 46 3C 32 EE FE 54 48 7A 76 68 FF 6A 87 1D" + @"IceSSL.Password", @"password" }; int i; diff --git a/objc/test/Ice/acm/run.py b/objc/test/Ice/acm/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/acm/run.py +++ b/objc/test/Ice/acm/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/adapterDeactivation/run.py b/objc/test/Ice/adapterDeactivation/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/adapterDeactivation/run.py +++ b/objc/test/Ice/adapterDeactivation/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/admin/AllTests.m b/objc/test/Ice/admin/AllTests.m index 8fe73dec44e..006af8832b3 100644 --- a/objc/test/Ice/admin/AllTests.m +++ b/objc/test/Ice/admin/AllTests.m @@ -24,9 +24,9 @@ testFacets(id<ICECommunicator> com, BOOL builtInFacets) test([com findAdminFacet:@"Metrics"]); } - TestAdminTestFacet* f1 = [TestFacetI testFacet]; - TestAdminTestFacet* f2 = [TestFacetI testFacet]; - TestAdminTestFacet* f3 = [TestFacetI testFacet]; + TestAdminTestFacet* f1 = [TestAdminTestFacetI testFacet]; + TestAdminTestFacet* f2 = [TestAdminTestFacetI testFacet]; + TestAdminTestFacet* f3 = [TestAdminTestFacetI testFacet]; [com addAdminFacet:f1 facet:@"Facet1"]; [com addAdminFacet:f2 facet:@"Facet2"]; diff --git a/objc/test/Ice/admin/Server.m b/objc/test/Ice/admin/Server.m index d28f08f313a..f2dff2b9ec5 100644 --- a/objc/test/Ice/admin/Server.m +++ b/objc/test/Ice/admin/Server.m @@ -16,7 +16,7 @@ run(id<ICECommunicator> communicator) { [[communicator getProperties] setProperty:@"TestAdapter.Endpoints" value:@"default -p 12010 -t 10000"]; id<ICEObjectAdapter> adapter = [communicator createObjectAdapter:@"TestAdapter"]; - [adapter add:[RemoteCommunicatorFactoryI remoteCommunicatorFactory] + [adapter add:[TestAdminRemoteCommunicatorFactoryI remoteCommunicatorFactory] identity:[communicator stringToIdentity:@"factory"]]; [adapter activate]; diff --git a/objc/test/Ice/admin/TestI.h b/objc/test/Ice/admin/TestI.h index 5cd84c6cd72..5dbd0808187 100644 --- a/objc/test/Ice/admin/TestI.h +++ b/objc/test/Ice/admin/TestI.h @@ -12,8 +12,8 @@ #import <Foundation/Foundation.h> -@interface RemoteCommunicatorI : TestAdminRemoteCommunicator<TestAdminRemoteCommunicator, - ICEPropertiesAdminUpdateCallback> +@interface TestAdminRemoteCommunicatorI : TestAdminRemoteCommunicator<TestAdminRemoteCommunicator, + ICEPropertiesAdminUpdateCallback> { id<ICECommunicator> _communicator; ICEMutablePropertyDict* _changes; @@ -23,8 +23,8 @@ +(id) remoteCommunicator:(id<ICECommunicator>)communicator; @end -@interface RemoteCommunicatorFactoryI : TestAdminRemoteCommunicatorFactory<TestAdminRemoteCommunicatorFactory> +@interface TestAdminRemoteCommunicatorFactoryI : TestAdminRemoteCommunicatorFactory<TestAdminRemoteCommunicatorFactory> @end -@interface TestFacetI : TestAdminTestFacet<TestAdminTestFacet> +@interface TestAdminTestFacetI : TestAdminTestFacet<TestAdminTestFacet> @end diff --git a/objc/test/Ice/admin/TestI.m b/objc/test/Ice/admin/TestI.m index f61fa30e51d..a63a31db733 100644 --- a/objc/test/Ice/admin/TestI.m +++ b/objc/test/Ice/admin/TestI.m @@ -38,11 +38,11 @@ } @end -@implementation RemoteCommunicatorI +@implementation TestAdminRemoteCommunicatorI +(id) remoteCommunicator:(id<ICECommunicator>)communicator { - RemoteCommunicatorI* obj = [RemoteCommunicatorI remoteCommunicator]; + TestAdminRemoteCommunicatorI* obj = [TestAdminRemoteCommunicatorI remoteCommunicator]; obj->_communicator = ICE_RETAIN(communicator); obj->_called = NO; obj->_cond = [[NSCondition alloc] init]; @@ -53,6 +53,7 @@ { [_communicator release]; [_cond release]; + [_changes release]; [super dealloc]; } #endif @@ -122,7 +123,7 @@ [_cond lock]; @try { - _changes = changes; + _changes = ICE_RETAIN(changes); _called = YES; [_cond signal]; } @@ -133,7 +134,7 @@ } @end -@implementation RemoteCommunicatorFactoryI +@implementation TestAdminRemoteCommunicatorFactoryI -(id<TestAdminRemoteCommunicatorPrx>) createCommunicator:(ICEMutablePropertyDict*)props current:(ICECurrent*)current { // @@ -159,13 +160,13 @@ // // Install a custom admin facet. // - [communicator addAdminFacet:[TestFacetI testFacet] facet:@"TestFacet"]; + [communicator addAdminFacet:[TestAdminTestFacetI testFacet] facet:@"TestFacet"]; // // The RemoteCommunicator servant also implements PropertiesAdminUpdateCallback. // Set the callback on the admin facet. // - RemoteCommunicatorI* servant = [RemoteCommunicatorI remoteCommunicator:communicator]; + TestAdminRemoteCommunicatorI* servant = [TestAdminRemoteCommunicatorI remoteCommunicator:communicator]; ICEObject* propFacet = [communicator findAdminFacet:@"Properties"]; if(propFacet != nil) { @@ -184,7 +185,7 @@ } @end -@implementation TestFacetI +@implementation TestAdminTestFacetI -(void) op:(ICECurrent*)current { } diff --git a/objc/test/Ice/admin/run.py b/objc/test/Ice/admin/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/admin/run.py +++ b/objc/test/Ice/admin/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/ami/run.py b/objc/test/Ice/ami/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/ami/run.py +++ b/objc/test/Ice/ami/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/binding/run.py b/objc/test/Ice/binding/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/binding/run.py +++ b/objc/test/Ice/binding/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/defaultServant/run.py b/objc/test/Ice/defaultServant/run.py index fde45700ed2..b155d75909d 100755 --- a/objc/test/Ice/defaultServant/run.py +++ b/objc/test/Ice/defaultServant/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/defaultValue/run.py b/objc/test/Ice/defaultValue/run.py index 0fb29bd2923..e925f3c7010 100755 --- a/objc/test/Ice/defaultValue/run.py +++ b/objc/test/Ice/defaultValue/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] @@ -22,4 +22,3 @@ import TestUtil client = os.path.join(os.getcwd(), "client") TestUtil.simpleTest(client) - diff --git a/objc/test/Ice/dispatcher/run.py b/objc/test/Ice/dispatcher/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/dispatcher/run.py +++ b/objc/test/Ice/dispatcher/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/enums/run.py b/objc/test/Ice/enums/run.py index 614bfe363bf..ad8767bd99e 100755 --- a/objc/test/Ice/enums/run.py +++ b/objc/test/Ice/enums/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/exceptions/run.py b/objc/test/Ice/exceptions/run.py index 9e92332d98b..6014ec1878d 100755 --- a/objc/test/Ice/exceptions/run.py +++ b/objc/test/Ice/exceptions/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/facets/run.py b/objc/test/Ice/facets/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/facets/run.py +++ b/objc/test/Ice/facets/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/faultTolerance/run.py b/objc/test/Ice/faultTolerance/run.py index e1fe07373fc..440686d85ed 100755 --- a/objc/test/Ice/faultTolerance/run.py +++ b/objc/test/Ice/faultTolerance/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/hash/run.py b/objc/test/Ice/hash/run.py index 0fb29bd2923..e925f3c7010 100755 --- a/objc/test/Ice/hash/run.py +++ b/objc/test/Ice/hash/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] @@ -22,4 +22,3 @@ import TestUtil client = os.path.join(os.getcwd(), "client") TestUtil.simpleTest(client) - diff --git a/objc/test/Ice/hold/run.py b/objc/test/Ice/hold/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/hold/run.py +++ b/objc/test/Ice/hold/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/info/run.py b/objc/test/Ice/info/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/info/run.py +++ b/objc/test/Ice/info/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/inheritance/run.py b/objc/test/Ice/inheritance/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/inheritance/run.py +++ b/objc/test/Ice/inheritance/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/interceptor/run.py b/objc/test/Ice/interceptor/run.py index 4832f30eccd..e7ab1bd2fe0 100755 --- a/objc/test/Ice/interceptor/run.py +++ b/objc/test/Ice/interceptor/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/invoke/run.py b/objc/test/Ice/invoke/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/invoke/run.py +++ b/objc/test/Ice/invoke/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/location/run.py b/objc/test/Ice/location/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/location/run.py +++ b/objc/test/Ice/location/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/metrics/run.py b/objc/test/Ice/metrics/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/metrics/run.py +++ b/objc/test/Ice/metrics/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/objects/run.py b/objc/test/Ice/objects/run.py index b1b2f4ab454..74e15b483a3 100755 --- a/objc/test/Ice/objects/run.py +++ b/objc/test/Ice/objects/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/operations/run.py b/objc/test/Ice/operations/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/operations/run.py +++ b/objc/test/Ice/operations/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/optional/run.py b/objc/test/Ice/optional/run.py index d76138b1e22..121ce5fd8b0 100755 --- a/objc/test/Ice/optional/run.py +++ b/objc/test/Ice/optional/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/proxy/run.py b/objc/test/Ice/proxy/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/proxy/run.py +++ b/objc/test/Ice/proxy/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/retry/run.py b/objc/test/Ice/retry/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/retry/run.py +++ b/objc/test/Ice/retry/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/servantLocator/run.py b/objc/test/Ice/servantLocator/run.py index 2307ecfe0a6..0816938a196 100755 --- a/objc/test/Ice/servantLocator/run.py +++ b/objc/test/Ice/servantLocator/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/services/run.py b/objc/test/Ice/services/run.py index 0fb29bd2923..e925f3c7010 100755 --- a/objc/test/Ice/services/run.py +++ b/objc/test/Ice/services/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] @@ -22,4 +22,3 @@ import TestUtil client = os.path.join(os.getcwd(), "client") TestUtil.simpleTest(client) - diff --git a/objc/test/Ice/slicing/exceptions/run.py b/objc/test/Ice/slicing/exceptions/run.py index af4afb8d4aa..15c789db2b5 100755 --- a/objc/test/Ice/slicing/exceptions/run.py +++ b/objc/test/Ice/slicing/exceptions/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../..", "../../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/slicing/objects/run.py b/objc/test/Ice/slicing/objects/run.py index c40f6f06f3e..2af0d5cf76a 100755 --- a/objc/test/Ice/slicing/objects/run.py +++ b/objc/test/Ice/slicing/objects/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../..", "../../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/stream/run.py b/objc/test/Ice/stream/run.py index a98fdc69fc8..365a6517aa2 100755 --- a/objc/test/Ice/stream/run.py +++ b/objc/test/Ice/stream/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Ice/timeout/run.py b/objc/test/Ice/timeout/run.py index 74d2e5d1724..ce8c5dd4b18 100755 --- a/objc/test/Ice/timeout/run.py +++ b/objc/test/Ice/timeout/run.py @@ -10,7 +10,7 @@ import os, sys -path = [ ".", "..", "../..", "../../..", "../../../.." ] +path = [ ".", "..", "../..", "../../..", "../../../..", "../../../../.." ] head = os.path.dirname(sys.argv[0]) if len(head) > 0: path = [os.path.join(head, p) for p in path] diff --git a/objc/test/Slice/keyword/Makefile b/objc/test/Slice/keyword/Makefile index 9328e39a9f3..9b10c64c182 100644 --- a/objc/test/Slice/keyword/Makefile +++ b/objc/test/Slice/keyword/Makefile @@ -15,8 +15,7 @@ TARGETS = $(CLIENT) SLICE_OBJS = Key.o Inherit.o -OBJS = Key.o \ - Inherit.o \ +OBJS = $(SLICE_OBJS) \ Client.o include $(top_srcdir)/config/Make.rules @@ -25,5 +24,4 @@ CPPFLAGS := -I. -I.. -I../../include $(CPPFLAGS) $(CLIENT): $(OBJS) rm -f $@ - $(CC) $(LDFLAGS) $(LDEXEFLAGS) $(STATICLIBSTDFLAG) -o $@ $(OBJS) $(TEST_LIBS) - + $(CXX) $(LDFLAGS) $(LDEXEFLAGS) -o $@ $(OBJS) $(TEST_LIBS) diff --git a/scripts/TestUtil.py b/scripts/TestUtil.py index 1a683861bf1..8932d64ed63 100755 --- a/scripts/TestUtil.py +++ b/scripts/TestUtil.py @@ -877,7 +877,7 @@ def getDefaultMapping(): here = os.getcwd().split(os.sep) here.reverse() for i in range(0, len(here)): - if here[i] in ["cpp", "cs", "java", "js", "php", "py", "rb", "objc", "cppe", "javae", "tmp"]: + if here[i] in ["cpp", "cs", "java", "js", "php", "py", "rb", "objc", "cppe", "javae", "icetouch", "tmp"]: return here[i] raise RuntimeError("cannot determine mapping") diff --git a/slice/Ice/LocalException.ice b/slice/Ice/LocalException.ice index 1c3c9654f5a..ad0fb29236b 100644 --- a/slice/Ice/LocalException.ice +++ b/slice/Ice/LocalException.ice @@ -510,6 +510,24 @@ local exception SocketException extends SyscallException /** * + * This exception indicates CFNetwork errors. + * + **/ +#ifdef ICE_USE_CFSTREAM +["cpp:ice_print"] +local exception CFNetworkException extends SocketException +{ + /** + * + * The domain of the error. + * + **/ + string domain; +}; +#endif + +/** + * * This exception indicates file errors. * **/ |