diff options
Diffstat (limited to 'php/src/php5')
-rw-r--r-- | php/src/php5/.depend.mak | 1233 | ||||
-rw-r--r-- | php/src/php5/Communicator.cpp | 771 | ||||
-rw-r--r-- | php/src/php5/Config.h | 2 | ||||
-rw-r--r-- | php/src/php5/Connection.cpp | 162 | ||||
-rw-r--r-- | php/src/php5/Endpoint.cpp | 91 | ||||
-rw-r--r-- | php/src/php5/IcePHP.rc | 38 | ||||
-rw-r--r-- | php/src/php5/Init.cpp | 117 | ||||
-rw-r--r-- | php/src/php5/Logger.cpp | 14 | ||||
-rw-r--r-- | php/src/php5/Makefile | 39 | ||||
-rw-r--r-- | php/src/php5/Makefile.mak | 53 | ||||
-rw-r--r-- | php/src/php5/Makefile.mk | 22 | ||||
-rw-r--r-- | php/src/php5/Operation.cpp | 95 | ||||
-rw-r--r-- | php/src/php5/Properties.cpp | 30 | ||||
-rw-r--r-- | php/src/php5/Proxy.cpp | 192 | ||||
-rw-r--r-- | php/src/php5/Proxy.h | 6 | ||||
-rw-r--r-- | php/src/php5/Types.cpp | 536 | ||||
-rw-r--r-- | php/src/php5/Types.h | 185 | ||||
-rw-r--r-- | php/src/php5/Util.cpp | 14 |
18 files changed, 1411 insertions, 2189 deletions
diff --git a/php/src/php5/.depend.mak b/php/src/php5/.depend.mak deleted file mode 100644 index 811a3c85864..00000000000 --- a/php/src/php5/.depend.mak +++ /dev/null @@ -1,1233 +0,0 @@ - -Communicator.obj: \ - Communicator.cpp \ - "Communicator.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Logger.h" \ - "Properties.h" \ - "Proxy.h" \ - "Types.h" \ - "Operation.h" \ - "$(ice_cpp_dir)\include\IceUtil\OutputUtil.h" \ - "Util.h" \ - "$(ice_cpp_dir)\include\IceUtil\Options.h" \ - "$(ice_cpp_dir)\include\IceUtil\RecMutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringUtil.h" \ - -Connection.obj: \ - Connection.cpp \ - "Connection.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Endpoint.h" \ - "Types.h" \ - "Communicator.h" \ - "Operation.h" \ - "$(ice_cpp_dir)\include\IceUtil\OutputUtil.h" \ - "Util.h" \ - -Endpoint.obj: \ - Endpoint.cpp \ - "Endpoint.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Util.h" \ - -Init.obj: \ - Init.cpp \ - "Communicator.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Connection.h" \ - "Endpoint.h" \ - "Logger.h" \ - "Operation.h" \ - "Properties.h" \ - "Proxy.h" \ - "Types.h" \ - "$(ice_cpp_dir)\include\IceUtil\OutputUtil.h" \ - "Util.h" \ - -Logger.obj: \ - Logger.cpp \ - "Logger.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Util.h" \ - -Operation.obj: \ - Operation.cpp \ - "Operation.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Communicator.h" \ - "Proxy.h" \ - "Types.h" \ - "$(ice_cpp_dir)\include\IceUtil\OutputUtil.h" \ - "Util.h" \ - "$(ice_cpp_dir)\include\Slice\PHPUtil.h" \ - "$(ice_cpp_dir)\include\Slice\Parser.h" \ - -Properties.obj: \ - Properties.cpp \ - "Properties.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Util.h" \ - -Proxy.obj: \ - Proxy.cpp \ - "Proxy.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Communicator.h" \ - "Types.h" \ - "Operation.h" \ - "$(ice_cpp_dir)\include\IceUtil\OutputUtil.h" \ - "Connection.h" \ - "Endpoint.h" \ - "Util.h" \ - -Types.obj: \ - Types.cpp \ - "Types.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "Communicator.h" \ - "Operation.h" \ - "$(ice_cpp_dir)\include\IceUtil\OutputUtil.h" \ - "Proxy.h" \ - "Util.h" \ - "$(ice_cpp_dir)\include\IceUtil\InputUtil.h" \ - "$(ice_cpp_dir)\include\Slice\PHPUtil.h" \ - "$(ice_cpp_dir)\include\Slice\Parser.h" \ - -Util.obj: \ - Util.cpp \ - "Util.h" \ - "Config.h" \ - "$(ice_cpp_dir)\include\Ice\Ice.h" \ - "$(ice_cpp_dir)\include\IceUtil\PushDisableWarnings.h" \ - "$(ice_cpp_dir)\include\Ice\Config.h" \ - "$(ice_cpp_dir)\include\IceUtil\Config.h" \ - "$(ice_cpp_dir)\include\Ice\DeprecatedStringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyF.h" \ - "$(ice_cpp_dir)\include\IceUtil\Shared.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyHandle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Handle.h" \ - "$(ice_cpp_dir)\include\IceUtil\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\Handle.h" \ - "$(ice_cpp_dir)\include\Ice\Exception.h" \ - "$(ice_cpp_dir)\include\Ice\Format.h" \ - "$(ice_cpp_dir)\include\Ice\StreamF.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObject.h" \ - "$(ice_cpp_dir)\include\Ice\LocalObjectF.h" \ - "$(ice_cpp_dir)\include\Ice\StreamHelpers.h" \ - "$(ice_cpp_dir)\include\IceUtil\ScopedArray.h" \ - "$(ice_cpp_dir)\include\IceUtil\Iterator.h" \ - "$(ice_cpp_dir)\include\IceUtil\Optional.h" \ - "$(ice_cpp_dir)\include\IceUtil\UndefSysMacros.h" \ - "$(ice_cpp_dir)\include\IceUtil\PopDisableWarnings.h" \ - "$(ice_cpp_dir)\include\IceUtil\StringConverter.h" \ - "$(ice_cpp_dir)\include\Ice\Plugin.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerF.h" \ - "$(ice_cpp_dir)\include\Ice\BuiltinSequences.h" \ - "$(ice_cpp_dir)\include\Ice\Initialize.h" \ - "$(ice_cpp_dir)\include\IceUtil\Timer.h" \ - "$(ice_cpp_dir)\include\IceUtil\Thread.h" \ - "$(ice_cpp_dir)\include\IceUtil\Mutex.h" \ - "$(ice_cpp_dir)\include\IceUtil\Lock.h" \ - "$(ice_cpp_dir)\include\IceUtil\ThreadException.h" \ - "$(ice_cpp_dir)\include\IceUtil\Time.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexProtocol.h" \ - "$(ice_cpp_dir)\include\IceUtil\Monitor.h" \ - "$(ice_cpp_dir)\include\IceUtil\Cond.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesF.h" \ - "$(ice_cpp_dir)\include\Ice\Proxy.h" \ - "$(ice_cpp_dir)\include\Ice\ProxyFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionIF.h" \ - "$(ice_cpp_dir)\include\Ice\RequestHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointF.h" \ - "$(ice_cpp_dir)\include\Ice\EndpointTypes.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapterF.h" \ - "$(ice_cpp_dir)\include\Ice\ReferenceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResult.h" \ - "$(ice_cpp_dir)\include\IceUtil\UniquePtr.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionF.h" \ - "$(ice_cpp_dir)\include\Ice\InstanceF.h" \ - "$(ice_cpp_dir)\include\Ice\AsyncResultF.h" \ - "$(ice_cpp_dir)\include\Ice\ObserverHelper.h" \ - "$(ice_cpp_dir)\include\Ice\Instrumentation.h" \ - "$(ice_cpp_dir)\include\Ice\Current.h" \ - "$(ice_cpp_dir)\include\Ice\Identity.h" \ - "$(ice_cpp_dir)\include\Ice\Version.h" \ - "$(ice_cpp_dir)\include\Ice\BasicStream.h" \ - "$(ice_cpp_dir)\include\Ice\Object.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryF.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactoryManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\Buffer.h" \ - "$(ice_cpp_dir)\include\Ice\Protocol.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedDataF.h" \ - "$(ice_cpp_dir)\include\Ice\UserExceptionFactory.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTable.h" \ - "$(ice_cpp_dir)\include\Ice\InstrumentationF.h" \ - "$(ice_cpp_dir)\include\Ice\Dispatcher.h" \ - "$(ice_cpp_dir)\include\Ice\LocalException.h" \ - "$(ice_cpp_dir)\include\Ice\PropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\GCObject.h" \ - "$(ice_cpp_dir)\include\IceUtil\MutexPtrLock.h" \ - "$(ice_cpp_dir)\include\Ice\Incoming.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\ServantManagerF.h" \ - "$(ice_cpp_dir)\include\Ice\ResponseHandlerF.h" \ - "$(ice_cpp_dir)\include\Ice\IncomingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Properties.h" \ - "$(ice_cpp_dir)\include\Ice\Logger.h" \ - "$(ice_cpp_dir)\include\Ice\LoggerUtil.h" \ - "$(ice_cpp_dir)\include\Ice\RemoteLogger.h" \ - "$(ice_cpp_dir)\include\Ice\FactoryTableInit.h" \ - "$(ice_cpp_dir)\include\Ice\DefaultObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectFactory.h" \ - "$(ice_cpp_dir)\include\Ice\Communicator.h" \ - "$(ice_cpp_dir)\include\Ice\RouterF.h" \ - "$(ice_cpp_dir)\include\Ice\LocatorF.h" \ - "$(ice_cpp_dir)\include\Ice\PluginF.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContextF.h" \ - "$(ice_cpp_dir)\include\Ice\FacetMap.h" \ - "$(ice_cpp_dir)\include\Ice\CommunicatorAsync.h" \ - "$(ice_cpp_dir)\include\Ice\ObjectAdapter.h" \ - "$(ice_cpp_dir)\include\Ice\Endpoint.h" \ - "$(ice_cpp_dir)\include\Ice\ServantLocator.h" \ - "$(ice_cpp_dir)\include\Ice\SlicedData.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsync.h" \ - "$(ice_cpp_dir)\include\Ice\OutgoingAsyncF.h" \ - "$(ice_cpp_dir)\include\Ice\Process.h" \ - "$(ice_cpp_dir)\include\Ice\Application.h" \ - "$(ice_cpp_dir)\include\Ice\Connection.h" \ - "$(ice_cpp_dir)\include\Ice\ConnectionAsync.h" \ - "$(ice_cpp_dir)\include\Ice\Functional.h" \ - "$(ice_cpp_dir)\include\IceUtil\Functional.h" \ - "$(ice_cpp_dir)\include\Ice\Stream.h" \ - "$(ice_cpp_dir)\include\Ice\ImplicitContext.h" \ - "$(ice_cpp_dir)\include\Ice\Locator.h" \ - "$(ice_cpp_dir)\include\Ice\ProcessF.h" \ - "$(ice_cpp_dir)\include\Ice\Router.h" \ - "$(ice_cpp_dir)\include\Ice\DispatchInterceptor.h" \ - "$(ice_cpp_dir)\include\Ice\NativePropertiesAdmin.h" \ - "$(ice_cpp_dir)\include\Ice\Metrics.h" \ - "$(ice_cpp_dir)\include\Ice\Service.h" \ - "$(ice_cpp_dir)\include\IceUtil\UUID.h" \ - "$(ice_cpp_dir)\include\Slice\PHPUtil.h" \ - "$(ice_cpp_dir)\include\Slice\Parser.h" \ diff --git a/php/src/php5/Communicator.cpp b/php/src/php5/Communicator.cpp index c1002bd046b..a541b426ebe 100644 --- a/php/src/php5/Communicator.cpp +++ b/php/src/php5/Communicator.cpp @@ -13,6 +13,7 @@ #include <Proxy.h> #include <Types.h> #include <Util.h> +#include <IceUtil/DisableWarnings.h> #include <IceUtil/Options.h> #include <IceUtil/MutexPtrLock.h> #include <IceUtil/StringUtil.h> @@ -30,6 +31,7 @@ namespace IcePHP { zend_class_entry* communicatorClassEntry = 0; +zend_class_entry* valueFactoryManagerClassEntry = 0; // // An active communicator is in use by at least one request and may have @@ -51,8 +53,19 @@ public: }; typedef IceUtil::Handle<ActiveCommunicator> ActiveCommunicatorPtr; -typedef std::map<std::string, zval*> ObjectFactoryMap; +class FactoryWrapper; +typedef IceUtil::Handle<FactoryWrapper> FactoryWrapperPtr; +class DefaultValueFactory; +typedef IceUtil::Handle<DefaultValueFactory> DefaultValueFactoryPtr; + +// +// CommunicatorInfoI encapsulates communicator-related information that +// is specific to a PHP "request". In other words, multiple PHP requests +// might share the same communicator instance but still need separate +// workspaces. For example, we don't want the value factories installed +// by one request to influence the behavior of another request. +// class CommunicatorInfoI : public CommunicatorInfo { public: @@ -65,44 +78,110 @@ public: virtual Ice::CommunicatorPtr getCommunicator() const; - bool addObjectFactory(const std::string&, zval* TSRMLS_DC); - bool findObjectFactory(const std::string&, zval* TSRMLS_DC); - void destroyObjectFactories(TSRMLS_D); + bool addFactory(zval*, const string&, bool TSRMLS_DC); + FactoryWrapperPtr findFactory(const string&) const; + Ice::ValueFactoryPtr defaultFactory() const { return _defaultFactory; } + void destroyFactories(TSRMLS_D); const ActiveCommunicatorPtr ac; const zval zv; - ObjectFactoryMap objectFactories; + +private: + + typedef map<string, FactoryWrapperPtr> FactoryMap; + + FactoryMap _factories; + DefaultValueFactoryPtr _defaultFactory; }; typedef IceUtil::Handle<CommunicatorInfoI> CommunicatorInfoIPtr; // -// Each PHP request has its own set of object factories. More precisely, there is -// an object factory map for each communicator that is created by a PHP request. -// The factory class defined below delegates the create/destroy methods to PHP -// objects supplied by the application. An instance of this class is installed -// as the communicator's default object factory, and the class holds a reference -// to its communicator. When create is invoked, the class resolves the appropriate -// PHP object as follows: +// Wraps a PHP object/value factory. +// +class FactoryWrapper : public Ice::ValueFactory +{ +public: + + FactoryWrapper(zval*, bool, const CommunicatorInfoIPtr&); + + virtual Ice::ValuePtr create(const string&); + + void getZval(zval* TSRMLS_DC); + + bool isObjectFactory() const; + + void destroy(TSRMLS_D); + +protected: + + zval* _factory; + bool _isObjectFactory; + CommunicatorInfoIPtr _info; +}; + +// +// Implements the default value factory behavior. +// +class DefaultValueFactory : public Ice::ValueFactory +{ +public: + + DefaultValueFactory(const CommunicatorInfoIPtr&); + + virtual Ice::ValuePtr create(const string&); + + void setDelegate(const FactoryWrapperPtr& d) { _delegate = d; } + FactoryWrapperPtr getDelegate() const { return _delegate; } + + void destroy(TSRMLS_D); + +private: + + FactoryWrapperPtr _delegate; + CommunicatorInfoIPtr _info; +}; + +// +// Each PHP request has its own set of value factories. More precisely, there is +// a value factory map for each communicator that is created by a PHP request. +// (see CommunicatorInfoI). +// +// We define a custom value factory manager implementation that delegates to +// to PHP objects supplied by the application. +// +// An instance of this class is installed as the communicator's value factory +// manager, and the class holds a reference to its communicator. When find() is +// invoked, the class resolves the appropriate factory as follows: // // * Using its communicator reference as the key, look up the corresponding // CommunicatorInfoI object in the request-specific communicator map. // -// * In the object factory map held by the CommunicatorInfoI object, look for a -// PHP factory object using the same algorithm as the Ice core. +// * If the type-id is empty, return the default factory. This factory will +// either delegate to an application-supplied default factory (if present) or +// default-construct an instance of a concrete Slice class type. +// +// * For non-empty type-ids, return a wrapper around the application-supplied +// factory, if any. // -class ObjectFactoryI : public Ice::ObjectFactory +class ValueFactoryManager : public Ice::ValueFactoryManager { public: - ObjectFactoryI(const Ice::CommunicatorPtr&); + virtual void add(const Ice::ValueFactoryPtr&, const string&); + virtual Ice::ValueFactoryPtr find(const string&) const; - virtual Ice::ObjectPtr create(const std::string&); - virtual void destroy(); + void setCommunicator(const Ice::CommunicatorPtr& c) { _communicator = c; } + Ice::CommunicatorPtr getCommunicator() const { return _communicator; } + + void getZval(zval* TSRMLS_DC); + + void destroy(); private: Ice::CommunicatorPtr _communicator; }; +typedef IceUtil::Handle<ValueFactoryManager> ValueFactoryManagerPtr; class ReaperTask : public IceUtil::TimerTask { @@ -121,6 +200,11 @@ namespace zend_object_handlers _handlers; // +// ValueFactoryManager support. +// +zend_object_handlers _vfmHandlers; + +// // The profile map holds Properties objects corresponding to the "default" profile // (defined via the ice.config & ice.options settings in php.ini) as well as named // profiles defined in an external file. @@ -154,7 +238,7 @@ public: { _registeredCommunicatorsMutex = new IceUtil::Mutex(); } - + ~Init() { delete _registeredCommunicatorsMutex; @@ -170,6 +254,10 @@ extern "C" static zend_object_value handleAlloc(zend_class_entry* TSRMLS_DC); static void handleFreeStorage(void* TSRMLS_DC); static zend_object_value handleClone(zval* TSRMLS_DC); + +static zend_object_value handleVfmAlloc(zend_class_entry* TSRMLS_DC); +static void handleVfmFreeStorage(void* TSRMLS_DC); +static zend_object_value handleVfmClone(zval* TSRMLS_DC); } ZEND_METHOD(Ice_Communicator, __construct) @@ -195,9 +283,9 @@ ZEND_METHOD(Ice_Communicator, destroy) } // - // We need to destroy any object factories installed by this request. + // We need to destroy any object|value factories installed by this request. // - _this->destroyObjectFactories(TSRMLS_C); + _this->destroyFactories(TSRMLS_C); Ice::CommunicatorPtr c = _this->getCommunicator(); assert(c); @@ -206,6 +294,10 @@ ZEND_METHOD(Ice_Communicator, destroy) assert(m->find(c) != m->end()); m->erase(c); + ValueFactoryManagerPtr vfm = ValueFactoryManagerPtr::dynamicCast(c->getValueFactoryManager()); + assert(vfm); + vfm->destroy(); + try { c->destroy(); @@ -262,7 +354,7 @@ ZEND_METHOD(Ice_Communicator, proxyToString) if(zv) { Ice::ObjectPrx prx; - ClassInfoPtr info; + ProxyInfoPtr info; if(!fetchProxy(zv, prx, info TSRMLS_CC)) { RETURN_NULL(); @@ -328,13 +420,13 @@ ZEND_METHOD(Ice_Communicator, proxyToProperty) if(zv) { Ice::ObjectPrx prx; - ClassInfoPtr info; + ProxyInfoPtr info; if(!fetchProxy(zv, prx, info TSRMLS_CC)) { RETURN_NULL(); } assert(prx); - + Ice::PropertyDict val = _this->getCommunicator()->proxyToProperty(prx, prefix); if(!createStringMap(return_value, val TSRMLS_CC)) { @@ -435,7 +527,7 @@ ZEND_METHOD(Ice_Communicator, addObjectFactory) type = string(id, idLen); } - if(!_this->addObjectFactory(type, factory TSRMLS_CC)) + if(!_this->addFactory(factory, type, true TSRMLS_CC)) { RETURN_NULL(); } @@ -459,8 +551,45 @@ ZEND_METHOD(Ice_Communicator, findObjectFactory) type = string(id, idLen); } - if(!_this->findObjectFactory(type, return_value TSRMLS_CC)) + FactoryWrapperPtr w = _this->findFactory(type); + if(w && w->isObjectFactory()) + { + w->getZval(return_value TSRMLS_CC); + } + else + { + RETURN_NULL(); + } +} + +ZEND_METHOD(Ice_Communicator, getValueFactoryManager) +{ + if(ZEND_NUM_ARGS() > 0) + { + WRONG_PARAM_COUNT; + } + + CommunicatorInfoIPtr _this = Wrapper<CommunicatorInfoIPtr>::value(getThis() TSRMLS_CC); + assert(_this); + + try + { + ValueFactoryManagerPtr vfm = + ValueFactoryManagerPtr::dynamicCast(_this->getCommunicator()->getValueFactoryManager()); + assert(vfm); + if(object_init_ex(return_value, valueFactoryManagerClassEntry) != SUCCESS) + { + runtimeError("unable to initialize properties object" TSRMLS_CC); + RETURN_NULL(); + } + + Wrapper<ValueFactoryManagerPtr>* obj = Wrapper<ValueFactoryManagerPtr>::extract(return_value TSRMLS_CC); + assert(!obj->ptr); + obj->ptr = new ValueFactoryManagerPtr(vfm); + } + catch(const IceUtil::Exception& ex) { + throwException(ex TSRMLS_CC); RETURN_NULL(); } } @@ -501,7 +630,7 @@ ZEND_METHOD(Ice_Communicator, getLogger) { WRONG_PARAM_COUNT; } - + CommunicatorInfoIPtr _this = Wrapper<CommunicatorInfoIPtr>::value(getThis() TSRMLS_CC); assert(_this); @@ -535,7 +664,7 @@ ZEND_METHOD(Ice_Communicator, getDefaultRouter) Ice::RouterPrx router = _this->getCommunicator()->getDefaultRouter(); if(router) { - ClassInfoPtr info = getClassInfoById("::Ice::Router" TSRMLS_CC); + ProxyInfoPtr info = getProxyInfo("::Ice::Router" TSRMLS_CC); if(!info) { runtimeError("no definition for Ice::Router" TSRMLS_CC); @@ -571,7 +700,7 @@ ZEND_METHOD(Ice_Communicator, setDefaultRouter) } Ice::ObjectPrx proxy; - ClassInfoPtr info; + ProxyInfoPtr info; if(zv && !fetchProxy(zv, proxy, info TSRMLS_CC)) { RETURN_NULL(); @@ -613,7 +742,7 @@ ZEND_METHOD(Ice_Communicator, getDefaultLocator) Ice::LocatorPrx locator = _this->getCommunicator()->getDefaultLocator(); if(locator) { - ClassInfoPtr info = getClassInfoById("::Ice::Locator" TSRMLS_CC); + ProxyInfoPtr info = getProxyInfo("::Ice::Locator" TSRMLS_CC); if(!info) { runtimeError("no definition for Ice::Locator" TSRMLS_CC); @@ -649,7 +778,7 @@ ZEND_METHOD(Ice_Communicator, setDefaultLocator) } Ice::ObjectPrx proxy; - ClassInfoPtr info; + ProxyInfoPtr info; if(zv && !fetchProxy(zv, proxy, info TSRMLS_CC)) { RETURN_NULL(); @@ -678,17 +807,25 @@ ZEND_METHOD(Ice_Communicator, setDefaultLocator) ZEND_METHOD(Ice_Communicator, flushBatchRequests) { - CommunicatorInfoIPtr _this = Wrapper<CommunicatorInfoIPtr>::value(getThis() TSRMLS_CC); - assert(_this); + zval* compress; + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("z"), &compress TSRMLS_CC) != SUCCESS) + { + RETURN_NULL(); + } - if(ZEND_NUM_ARGS() != 8) + if(Z_TYPE_P(compress) != IS_LONG) { - WRONG_PARAM_COUNT; + invalidArgument("value for 'compress' argument must be an enumerator of CompressBatch" TSRMLS_CC); + RETURN_NULL(); } + Ice::CompressBatch cb = static_cast<Ice::CompressBatch>(Z_LVAL_P(compress)); + + CommunicatorInfoIPtr _this = Wrapper<CommunicatorInfoIPtr>::value(getThis() TSRMLS_CC); + assert(_this); try { - _this->getCommunicator()->flushBatchRequests(); + _this->getCommunicator()->flushBatchRequests(cb); } catch(const IceUtil::Exception& ex) { @@ -697,6 +834,83 @@ ZEND_METHOD(Ice_Communicator, flushBatchRequests) } } +ZEND_METHOD(Ice_ValueFactoryManager, __construct) +{ + runtimeError("value factory managers cannot be instantiated directly" TSRMLS_CC); +} + +ZEND_METHOD(Ice_ValueFactoryManager, add) +{ + ValueFactoryManagerPtr _this = Wrapper<ValueFactoryManagerPtr>::value(getThis() TSRMLS_CC); + assert(_this); + + zend_class_entry* factoryClass = idToClass("Ice::ValueFactory" TSRMLS_CC); + assert(factoryClass); + + zval* factory; + char* id; + int idLen; + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("Os!"), &factory, factoryClass, &id, + &idLen TSRMLS_CC) != SUCCESS) + { + RETURN_NULL(); + } + + string type; + if(id) + { + type = string(id, idLen); + } + + CommunicatorMap* m = static_cast<CommunicatorMap*>(ICE_G(communicatorMap)); + assert(m); + CommunicatorMap::iterator p = m->find(_this->getCommunicator()); + assert(p != m->end()); + + CommunicatorInfoIPtr info = p->second; + + if(!info->addFactory(factory, type, false TSRMLS_CC)) + { + RETURN_NULL(); + } +} + +ZEND_METHOD(Ice_ValueFactoryManager, find) +{ + ValueFactoryManagerPtr _this = Wrapper<ValueFactoryManagerPtr>::value(getThis() TSRMLS_CC); + assert(_this); + + char* id; + int idLen; + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("s!"), &id, &idLen TSRMLS_CC) != SUCCESS) + { + RETURN_NULL(); + } + + string type; + if(id) + { + type = string(id, idLen); + } + + CommunicatorMap* m = static_cast<CommunicatorMap*>(ICE_G(communicatorMap)); + assert(m); + CommunicatorMap::iterator p = m->find(_this->getCommunicator()); + assert(p != m->end()); + + CommunicatorInfoIPtr info = p->second; + + FactoryWrapperPtr w = info->findFactory(type); + if(w) + { + w->getZval(return_value TSRMLS_CC); + } + else + { + RETURN_NULL(); + } +} + #ifdef _WIN32 extern "C" #endif @@ -736,6 +950,46 @@ handleClone(zval* zv TSRMLS_DC) return zend_object_value(); } +#ifdef _WIN32 +extern "C" +#endif +static zend_object_value +handleVfmAlloc(zend_class_entry* ce TSRMLS_DC) +{ + zend_object_value result; + + Wrapper<ValueFactoryManagerPtr>* obj = Wrapper<ValueFactoryManagerPtr>::create(ce TSRMLS_CC); + assert(obj); + + result.handle = + zend_objects_store_put(obj, 0, (zend_objects_free_object_storage_t)handleVfmFreeStorage, 0 TSRMLS_CC); + result.handlers = &_vfmHandlers; + + return result; +} + +#ifdef _WIN32 +extern "C" +#endif +static void +handleVfmFreeStorage(void* p TSRMLS_DC) +{ + Wrapper<ValueFactoryManagerPtr>* obj = static_cast<Wrapper<ValueFactoryManagerPtr>*>(p); + delete obj->ptr; + zend_object_std_dtor(static_cast<zend_object*>(p) TSRMLS_CC); + efree(p); +} + +#ifdef _WIN32 +extern "C" +#endif +static zend_object_value +handleVfmClone(zval* zv TSRMLS_DC) +{ + php_error_docref(0 TSRMLS_CC, E_ERROR, "value factory managers cannot be cloned"); + return zend_object_value(); +} + static CommunicatorInfoIPtr createCommunicator(zval* zv, const ActiveCommunicatorPtr& ac TSRMLS_DC) { @@ -791,10 +1045,9 @@ initializeCommunicator(zval* zv, Ice::StringSeq& args, bool hasArgs, const Ice:: ActiveCommunicatorPtr ac = new ActiveCommunicator(c); - // - // Install a default object factory that delegates to PHP factories. - // - c->addObjectFactory(new ObjectFactoryI(c), ""); + ValueFactoryManagerPtr vfm = ValueFactoryManagerPtr::dynamicCast(c->getValueFactoryManager()); + assert(vfm); + vfm->setCommunicator(c); CommunicatorInfoIPtr info = createCommunicator(zv, ac TSRMLS_CC); if(!info) @@ -806,6 +1059,8 @@ initializeCommunicator(zval* zv, Ice::StringSeq& args, bool hasArgs, const Ice:: catch(...) { } + + vfm->destroy(); } return info; @@ -897,7 +1152,8 @@ ZEND_FUNCTION(Ice_initialize) string member; member = "properties"; - if(zend_hash_find(Z_OBJPROP_P(zvinit), STRCAST(member.c_str()), static_cast<uint>(member.size() + 1), &data) == SUCCESS) + if(zend_hash_find(Z_OBJPROP_P(zvinit), STRCAST(member.c_str()), static_cast<uint>(member.size() + 1), &data) + == SUCCESS) { zval** val = reinterpret_cast<zval**>(data); if(!fetchProperties(*val, initData.properties TSRMLS_CC)) @@ -907,7 +1163,8 @@ ZEND_FUNCTION(Ice_initialize) } member = "logger"; - if(zend_hash_find(Z_OBJPROP_P(zvinit), STRCAST(member.c_str()), static_cast<uint>(member.size() + 1), &data) == SUCCESS) + if(zend_hash_find(Z_OBJPROP_P(zvinit), STRCAST(member.c_str()), static_cast<uint>(member.size() + 1), &data) + == SUCCESS) { zval** val = reinterpret_cast<zval**>(data); if(!fetchLogger(*val, initData.logger TSRMLS_CC)) @@ -918,6 +1175,7 @@ ZEND_FUNCTION(Ice_initialize) } initData.compactIdResolver = new IdResolver(TSRMLS_C); + initData.valueFactoryManager = new ValueFactoryManager; CommunicatorInfoIPtr info = initializeCommunicator(return_value, seq, hasArgs, initData TSRMLS_CC); if(!info) @@ -1115,7 +1373,9 @@ ZEND_FUNCTION(Ice_identityToString) assert(identityClass); zval* zv; - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("O"), &zv, identityClass) != SUCCESS) + long mode = 0; + + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("O|l"), &zv, identityClass, &mode TSRMLS_CC) != SUCCESS) { RETURN_NULL(); } @@ -1127,7 +1387,7 @@ ZEND_FUNCTION(Ice_identityToString) try { - string str = Ice::identityToString(id); + string str = identityToString(id, static_cast<Ice::ToStringMode>(mode)); RETURN_STRINGL(STRCAST(str.c_str()), static_cast<int>(str.length()), 1); } catch(const IceUtil::Exception& ex) @@ -1179,24 +1439,40 @@ static zend_function_entry _interfaceMethods[] = }; static zend_function_entry _classMethods[] = { - ZEND_ME(Ice_Communicator, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) - ZEND_ME(Ice_Communicator, destroy, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, stringToProxy, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, proxyToString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, propertyToProxy, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, proxyToProperty, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, stringToIdentity, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, identityToString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, addObjectFactory, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, findObjectFactory, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, getImplicitContext, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, getProperties, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, getLogger, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, getDefaultRouter, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, setDefaultRouter, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, getDefaultLocator, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, setDefaultLocator, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Communicator, flushBatchRequests, NULL, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_Communicator, destroy, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, stringToProxy, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, proxyToString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, propertyToProxy, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, proxyToProperty, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, stringToIdentity, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, identityToString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, addObjectFactory, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, findObjectFactory, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, getValueFactoryManager, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, getImplicitContext, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, getProperties, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, getLogger, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, getDefaultRouter, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, setDefaultRouter, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, getDefaultLocator, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, setDefaultLocator, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Communicator, flushBatchRequests, ICE_NULLPTR, ZEND_ACC_PUBLIC) + {0, 0, 0} +}; + +// +// Predefined methods for ValueFactoryManager. +// +static zend_function_entry _vfmInterfaceMethods[] = +{ + {0, 0, 0} +}; +static zend_function_entry _vfmClassMethods[] = +{ + ZEND_ME(Ice_ValueFactoryManager, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_ValueFactoryManager, add, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ValueFactoryManager, find, ICE_NULLPTR, ZEND_ACC_PUBLIC) {0, 0, 0} }; @@ -1410,6 +1686,26 @@ IcePHP::communicatorInit(TSRMLS_D) zend_class_implements(communicatorClassEntry TSRMLS_CC, 1, interface); // + // Register the ValueFactoryManager interface. + // +#ifdef ICEPHP_USE_NAMESPACES + INIT_NS_CLASS_ENTRY(ce, "Ice", "ValueFactoryManager", _vfmInterfaceMethods); +#else + INIT_CLASS_ENTRY(ce, "Ice_ValueFactoryManager", _vfmInterfaceMethods); +#endif + zend_class_entry* vfmInterface = zend_register_internal_interface(&ce TSRMLS_CC); + + // + // Register the ValueFactoryManager class. + // + INIT_CLASS_ENTRY(ce, "IcePHP_ValueFactoryManager", _vfmClassMethods); + ce.create_object = handleVfmAlloc; + valueFactoryManagerClassEntry = zend_register_internal_class(&ce TSRMLS_CC); + memcpy(&_vfmHandlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + _vfmHandlers.clone_obj = handleVfmClone; + zend_class_implements(valueFactoryManagerClassEntry TSRMLS_CC, 1, vfmInterface); + + // // Create the profiles from configuration settings. // const char* empty = ""; @@ -1501,9 +1797,9 @@ IcePHP::communicatorRequestShutdown(TSRMLS_D) CommunicatorInfoIPtr info = p->second; // - // We need to destroy any object factories installed during this request. + // We need to destroy any object|value factories installed during this request. // - info->destroyObjectFactories(TSRMLS_C); + info->destroyFactories(TSRMLS_C); } // @@ -1536,121 +1832,131 @@ IcePHP::ActiveCommunicator::~ActiveCommunicator() } } -IcePHP::CommunicatorInfoI::CommunicatorInfoI(const ActiveCommunicatorPtr& c, zval* z) : - ac(c), - zv(*z) // This is legal - it simply copies the object's handle. +IcePHP::FactoryWrapper::FactoryWrapper(zval* factory, bool isObjectFactory, const CommunicatorInfoIPtr& info) : + _factory(factory), + _isObjectFactory(isObjectFactory), + _info(info) { + Z_ADDREF_P(_factory); } -void -IcePHP::CommunicatorInfoI::getZval(zval* z TSRMLS_DC) +Ice::ValuePtr +IcePHP::FactoryWrapper::create(const string& id) { - Z_TYPE_P(z) = IS_OBJECT; - z->value.obj = zv.value.obj; - addRef(TSRMLS_C); -} + // + // Get the TSRM id for the current request. + // + TSRMLS_FETCH(); -void -IcePHP::CommunicatorInfoI::addRef(TSRMLS_D) -{ - zval* p = const_cast<zval*>(&zv); - Z_OBJ_HT_P(p)->add_ref(p TSRMLS_CC); -} + // + // Get the type information. + // + ClassInfoPtr cls; + if(id == Ice::Object::ice_staticId()) + { + // + // When the ID is that of Ice::Object, it indicates that the stream has not + // found a factory and is providing us an opportunity to preserve the object. + // + cls = getClassInfoById("::Ice::UnknownSlicedValue" TSRMLS_CC); + } + else + { + cls = getClassInfoById(id TSRMLS_CC); + } -void -IcePHP::CommunicatorInfoI::decRef(TSRMLS_D) -{ - zval* p = const_cast<zval*>(&zv); - Z_OBJ_HT(zv)->del_ref(p TSRMLS_CC); -} + if(!cls) + { + return 0; + } -Ice::CommunicatorPtr -IcePHP::CommunicatorInfoI::getCommunicator() const -{ - return ac->communicator; -} + zval* arg; + MAKE_STD_ZVAL(arg); + ZVAL_STRINGL(arg, STRCAST(id.c_str()), static_cast<int>(id.length()), 1); -bool -IcePHP::CommunicatorInfoI::addObjectFactory(const string& id, zval* factory TSRMLS_DC) -{ - ObjectFactoryMap::iterator p = objectFactories.find(id); - if(p != objectFactories.end()) + zval* obj = 0; + + zend_try { - Ice::AlreadyRegisteredException ex(__FILE__, __LINE__); - ex.kindOfObject = "object factory"; - ex.id = id; - throwException(ex TSRMLS_CC); - return false; + const char* func = "create"; + zend_call_method(&_factory, 0, 0, const_cast<char*>(func), static_cast<int>(strlen(func)), &obj, 1, arg, + 0 TSRMLS_CC); } + zend_catch + { + obj = 0; + } + zend_end_try(); - objectFactories.insert(ObjectFactoryMap::value_type(id, factory)); - Z_ADDREF_P(factory); + zval_ptr_dtor(&arg); - return true; -} + // + // Bail out if an exception has already been thrown. + // + if(!obj || EG(exception)) + { + throw AbortMarshaling(); + } -bool -IcePHP::CommunicatorInfoI::findObjectFactory(const string& id, zval* zv TSRMLS_DC) -{ - ObjectFactoryMap::iterator p = objectFactories.find(id); - if(p != objectFactories.end()) + AutoDestroy destroy(obj); + + if(Z_TYPE_P(obj) == IS_NULL) { - *zv = *p->second; // This is legal - it simply copies the object's handle. - INIT_PZVAL(zv); - zval_copy_ctor(zv); - return true; + return 0; } - return false; + return new ObjectReader(obj, cls, _info TSRMLS_CC); +} + +void +IcePHP::FactoryWrapper::getZval(zval* factory TSRMLS_DC) +{ + *factory = *_factory; // This is legal - it simply copies the object's handle. + INIT_PZVAL(factory); + zval_copy_ctor(factory); +} + +bool +IcePHP::FactoryWrapper::isObjectFactory() const +{ + return _isObjectFactory; } void -IcePHP::CommunicatorInfoI::destroyObjectFactories(TSRMLS_D) +IcePHP::FactoryWrapper::destroy(TSRMLS_D) { - for(ObjectFactoryMap::iterator p = objectFactories.begin(); p != objectFactories.end(); ++p) + if(_isObjectFactory) { // - // Invoke the destroy method on each registered PHP factory. + // Invoke the destroy method on the PHP factory. // - invokeMethod(p->second, "destroy" TSRMLS_CC); + invokeMethod(_factory, "destroy" TSRMLS_CC); zend_clear_exception(TSRMLS_C); - zval_ptr_dtor(&p->second); } + zval_ptr_dtor(&_factory); + _info = 0; } -IcePHP::ObjectFactoryI::ObjectFactoryI(const Ice::CommunicatorPtr& communicator) : - _communicator(communicator) +IcePHP::DefaultValueFactory::DefaultValueFactory(const CommunicatorInfoIPtr& info) : + _info(info) { } -Ice::ObjectPtr -IcePHP::ObjectFactoryI::create(const string& id) +Ice::ValuePtr +IcePHP::DefaultValueFactory::create(const string& id) { // // Get the TSRM id for the current request. // TSRMLS_FETCH(); - CommunicatorMap* m = static_cast<CommunicatorMap*>(ICE_G(communicatorMap)); - assert(m); - CommunicatorMap::iterator p = m->find(_communicator); - assert(p != m->end()); - - CommunicatorInfoIPtr info = p->second; - - zval* factory = 0; - - // - // Check if the application has registered a factory for this id. - // - ObjectFactoryMap::iterator q = info->objectFactories.find(id); - if(q == info->objectFactories.end()) + if(_delegate) { - q = info->objectFactories.find(""); // Look for a default factory. - } - if(q != info->objectFactories.end()) - { - factory = q->second; + Ice::ValuePtr v = _delegate->create(id); + if(v) + { + return v; + } } // @@ -1663,7 +1969,7 @@ IcePHP::ObjectFactoryI::create(const string& id) // When the ID is that of Ice::Object, it indicates that the stream has not // found a factory and is providing us an opportunity to preserve the object. // - cls = getClassInfoById("::Ice::UnknownSlicedObject" TSRMLS_CC); + cls = getClassInfoById("::Ice::UnknownSlicedValue" TSRMLS_CC); } else { @@ -1675,75 +1981,172 @@ IcePHP::ObjectFactoryI::create(const string& id) return 0; } - if(factory) + // + // Instantiate the object. + // + zval* obj; + MAKE_STD_ZVAL(obj); + AutoDestroy destroy(obj); + + if(object_init_ex(obj, const_cast<zend_class_entry*>(cls->zce)) != SUCCESS) + { + throw AbortMarshaling(); + } + + if(!invokeMethod(obj, ZEND_CONSTRUCTOR_FUNC_NAME TSRMLS_CC)) + { + throw AbortMarshaling(); + } + + return new ObjectReader(obj, cls, _info TSRMLS_CC); +} + +void +IcePHP::DefaultValueFactory::destroy(TSRMLS_D) +{ + if(_delegate) { - zval* arg; - MAKE_STD_ZVAL(arg); - ZVAL_STRINGL(arg, STRCAST(id.c_str()), static_cast<int>(id.length()), 1); + _delegate->destroy(); + _delegate = 0; + } + _info = 0; +} + +IcePHP::CommunicatorInfoI::CommunicatorInfoI(const ActiveCommunicatorPtr& c, zval* z) : + ac(c), + zv(*z), // This is legal - it simply copies the object's handle. + _defaultFactory(new DefaultValueFactory(this)) +{ +} - zval* obj = 0; +void +IcePHP::CommunicatorInfoI::getZval(zval* z TSRMLS_DC) +{ + Z_TYPE_P(z) = IS_OBJECT; + z->value.obj = zv.value.obj; + addRef(TSRMLS_C); +} - zend_try - { - const char* func = "create"; - zend_call_method(&factory, 0, 0, const_cast<char*>(func), static_cast<int>(strlen(func)), &obj, 1, arg, 0 TSRMLS_CC); - } - zend_catch +void +IcePHP::CommunicatorInfoI::addRef(TSRMLS_D) +{ + zval* p = const_cast<zval*>(&zv); + Z_OBJ_HT_P(p)->add_ref(p TSRMLS_CC); +} + +void +IcePHP::CommunicatorInfoI::decRef(TSRMLS_D) +{ + zval* p = const_cast<zval*>(&zv); + Z_OBJ_HT(zv)->del_ref(p TSRMLS_CC); +} + +Ice::CommunicatorPtr +IcePHP::CommunicatorInfoI::getCommunicator() const +{ + return ac->communicator; +} + +bool +IcePHP::CommunicatorInfoI::addFactory(zval* factory, const string& id, bool isObjectFactory TSRMLS_DC) +{ + if(id.empty()) + { + if(_defaultFactory->getDelegate()) { - obj = 0; + Ice::AlreadyRegisteredException ex(__FILE__, __LINE__); + ex.kindOfObject = "value factory"; + ex.id = id; + throwException(ex TSRMLS_CC); + return false; } - zend_end_try(); - zval_ptr_dtor(&arg); - - // - // Bail out if an exception has already been thrown. - // - if(!obj || EG(exception)) + _defaultFactory->setDelegate(new FactoryWrapper(factory, isObjectFactory, this)); + } + else + { + FactoryMap::iterator p = _factories.find(id); + if(p != _factories.end()) { - throw AbortMarshaling(); + Ice::AlreadyRegisteredException ex(__FILE__, __LINE__); + ex.kindOfObject = "value factory"; + ex.id = id; + throwException(ex TSRMLS_CC); + return false; } - AutoDestroy destroy(obj); + _factories.insert(FactoryMap::value_type(id, new FactoryWrapper(factory, isObjectFactory, this))); + } - if(Z_TYPE_P(obj) == IS_NULL) + return true; +} + +FactoryWrapperPtr +IcePHP::CommunicatorInfoI::findFactory(const string& id) const +{ + if(id.empty()) + { + return _defaultFactory->getDelegate(); + } + else + { + FactoryMap::const_iterator p = _factories.find(id); + if(p != _factories.end()) { - return 0; + return p->second; } + } - return new ObjectReader(obj, cls, info TSRMLS_CC); + return 0; +} + +void +IcePHP::CommunicatorInfoI::destroyFactories(TSRMLS_D) +{ + for(FactoryMap::iterator p = _factories.begin(); p != _factories.end(); ++p) + { + p->second->destroy(TSRMLS_C); } + _factories.clear(); + _defaultFactory->destroy(TSRMLS_C); +} +void +IcePHP::ValueFactoryManager::add(const Ice::ValueFactoryPtr&, const string&) +{ // - // If the requested type is an abstract class, then we give up. + // We don't support factories registered in C++. // - if(cls->isAbstract) - { - return 0; - } + throw Ice::FeatureNotSupportedException(__FILE__, __LINE__, "C++ value factory"); +} +Ice::ValueFactoryPtr +IcePHP::ValueFactoryManager::find(const string& id) const +{ // - // Instantiate the object. + // Get the TSRM id for the current request. // - zval* obj; - MAKE_STD_ZVAL(obj); - AutoDestroy destroy(obj); + TSRMLS_FETCH(); - if(object_init_ex(obj, const_cast<zend_class_entry*>(cls->zce)) != SUCCESS) + CommunicatorMap* m = static_cast<CommunicatorMap*>(ICE_G(communicatorMap)); + assert(m); + CommunicatorMap::iterator p = m->find(_communicator); + assert(p != m->end()); + + CommunicatorInfoIPtr info = p->second; + + if(id.empty()) { - throw AbortMarshaling(); + return info->defaultFactory(); } - - if(!invokeMethod(obj, ZEND_CONSTRUCTOR_FUNC_NAME TSRMLS_CC)) + else { - throw AbortMarshaling(); + return info->findFactory(id); } - - return new ObjectReader(obj, cls, info TSRMLS_CC); } void -IcePHP::ObjectFactoryI::destroy() +IcePHP::ValueFactoryManager::destroy() { _communicator = 0; } diff --git a/php/src/php5/Config.h b/php/src/php5/Config.h index 2f968cd0d3f..9c80de86f59 100644 --- a/php/src/php5/Config.h +++ b/php/src/php5/Config.h @@ -39,7 +39,7 @@ extern "C" #ifdef _WIN32 # pragma warning( disable : 4018) // suppress signed/unsigned mismatch in zend_execute.h (PHP 5.3.x) #elif defined(__GNUC__) -# pragma GCC diagnostic warning "-Wsign-compare" +# pragma GCC diagnostic warning "-Wsign-compare" #endif #ifdef _WIN64 diff --git a/php/src/php5/Connection.cpp b/php/src/php5/Connection.cpp index bf0c57307c2..8a894b2457a 100644 --- a/php/src/php5/Connection.cpp +++ b/php/src/php5/Connection.cpp @@ -29,7 +29,6 @@ static zend_class_entry* tcpConnectionInfoClassEntry = 0; static zend_class_entry* udpConnectionInfoClassEntry = 0; static zend_class_entry* wsConnectionInfoClassEntry = 0; static zend_class_entry* sslConnectionInfoClassEntry = 0; -static zend_class_entry* wssConnectionInfoClassEntry = 0; // // Ice::Connection support. @@ -79,15 +78,22 @@ ZEND_METHOD(Ice_Connection, close) Ice::ConnectionPtr _this = Wrapper<Ice::ConnectionPtr>::value(getThis() TSRMLS_CC); assert(_this); - zend_bool b; - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("b"), &b TSRMLS_CC) != SUCCESS) + zval* mode; + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("z"), &mode TSRMLS_CC) != SUCCESS) { RETURN_NULL(); } + if(Z_TYPE_P(mode) != IS_LONG) + { + invalidArgument("value for 'mode' argument must be an enumerator of ConnectionClose" TSRMLS_CC); + RETURN_NULL(); + } + Ice::ConnectionClose cc = static_cast<Ice::ConnectionClose>(Z_LVAL_P(mode)); + try { - _this->close(b ? true : false); + _this->close(cc); } catch(const IceUtil::Exception& ex) { @@ -122,6 +128,35 @@ ZEND_METHOD(Ice_Connection, getEndpoint) ZEND_METHOD(Ice_Connection, flushBatchRequests) { + zval* compress; + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("z"), &compress TSRMLS_CC) != SUCCESS) + { + RETURN_NULL(); + } + + if(Z_TYPE_P(compress) != IS_LONG) + { + invalidArgument("value for 'compress' argument must be an enumerator of CompressBatch" TSRMLS_CC); + RETURN_NULL(); + } + Ice::CompressBatch cb = static_cast<Ice::CompressBatch>(Z_LVAL_P(compress)); + + Ice::ConnectionPtr _this = Wrapper<Ice::ConnectionPtr>::value(getThis() TSRMLS_CC); + assert(_this); + + try + { + _this->flushBatchRequests(cb); + } + catch(const IceUtil::Exception& ex) + { + throwException(ex TSRMLS_CC); + RETURN_NULL(); + } +} + +ZEND_METHOD(Ice_Connection, heartbeat) +{ if(ZEND_NUM_ARGS() > 0) { WRONG_PARAM_COUNT; @@ -132,7 +167,7 @@ ZEND_METHOD(Ice_Connection, flushBatchRequests) try { - _this->flushBatchRequests(); + _this->heartbeat(); } catch(const IceUtil::Exception& ex) { @@ -407,18 +442,19 @@ static zend_function_entry _interfaceMethods[] = }; static zend_function_entry _connectionClassMethods[] = { - ZEND_ME(Ice_Connection, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) - ZEND_ME(Ice_Connection, __toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, close, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, getEndpoint, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, flushBatchRequests, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, setACM, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, getACM, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, type, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, timeout, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, getInfo, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Connection, setBufferSize, NULL, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_Connection, __toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, close, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, getEndpoint, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, flushBatchRequests, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, heartbeat, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, setACM, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, getACM, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, type, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, timeout, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, getInfo, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Connection, setBufferSize, ICE_NULLPTR, ZEND_ACC_PUBLIC) {0, 0, 0} }; @@ -432,7 +468,7 @@ ZEND_METHOD(Ice_ConnectionInfo, __construct) // static zend_function_entry _connectionInfoClassMethods[] = { - ZEND_ME(Ice_ConnectionInfo, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_ConnectionInfo, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) {0, 0, 0} }; // @@ -512,6 +548,8 @@ IcePHP::connectionInit(TSRMLS_D) ce.create_object = handleConnectionInfoAlloc; connectionInfoClassEntry = zend_register_internal_class(&ce TSRMLS_CC); memcpy(&_connectionInfoHandlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + zend_declare_property_null(connectionInfoClassEntry, STRCAST("underlying"), sizeof("underlying") - 1, + ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_bool(connectionInfoClassEntry, STRCAST("incoming"), sizeof("incoming") - 1, 0, ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_string(connectionInfoClassEntry, STRCAST("adapterName"), sizeof("adapterName") - 1, @@ -521,12 +559,12 @@ IcePHP::connectionInit(TSRMLS_D) // Register the IPConnectionInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "IPConnectionInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "IPConnectionInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_IPConnectionInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_IPConnectionInfo", ICE_NULLPTR); #endif ce.create_object = handleConnectionInfoAlloc; - ipConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, connectionInfoClassEntry, NULL TSRMLS_CC); + ipConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, connectionInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_string(ipConnectionInfoClassEntry, STRCAST("localAddress"), sizeof("localAddress") - 1, STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_long(ipConnectionInfoClassEntry, STRCAST("localPort"), sizeof("localPort") - 1, 0, @@ -540,23 +578,23 @@ IcePHP::connectionInit(TSRMLS_D) // Register the TCPConnectionInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "TCPConnectionInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "TCPConnectionInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_TCPConnectionInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_TCPConnectionInfo", ICE_NULLPTR); #endif ce.create_object = handleConnectionInfoAlloc; - tcpConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, ipConnectionInfoClassEntry, NULL TSRMLS_CC); + tcpConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, ipConnectionInfoClassEntry, ICE_NULLPTR TSRMLS_CC); // // Register the UDPConnectionInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "UDPConnectionInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "UDPConnectionInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_UDPConnectionInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_UDPConnectionInfo", ICE_NULLPTR); #endif ce.create_object = handleConnectionInfoAlloc; - udpConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, ipConnectionInfoClassEntry, NULL TSRMLS_CC); + udpConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, ipConnectionInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_string(udpConnectionInfoClassEntry, STRCAST("mcastAddress"), sizeof("mcastAddress") - 1, STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_long(udpConnectionInfoClassEntry, STRCAST("mcastPort"), sizeof("mcastPort") - 1, 0, @@ -566,12 +604,12 @@ IcePHP::connectionInit(TSRMLS_D) // Register the WSConnectionInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "WSConnectionInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "WSConnectionInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_WSConnectionInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_WSConnectionInfo", ICE_NULLPTR); #endif ce.create_object = handleConnectionInfoAlloc; - wsConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, ipConnectionInfoClassEntry, NULL TSRMLS_CC); + wsConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, connectionInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_string(wsConnectionInfoClassEntry, STRCAST("headers"), sizeof("headers") - 1, STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); @@ -579,12 +617,12 @@ IcePHP::connectionInit(TSRMLS_D) // Register the SSLConnectionInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "SSLConnectionInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "SSLConnectionInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_SSLConnectionInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_SSLConnectionInfo", ICE_NULLPTR); #endif ce.create_object = handleConnectionInfoAlloc; - sslConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, ipConnectionInfoClassEntry, NULL TSRMLS_CC); + sslConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, connectionInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_string(sslConnectionInfoClassEntry, STRCAST("cipher"), sizeof("cipher") - 1, STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_string(sslConnectionInfoClassEntry, STRCAST("certs"), sizeof("certs") - 1, @@ -592,20 +630,6 @@ IcePHP::connectionInit(TSRMLS_D) zend_declare_property_bool(sslConnectionInfoClassEntry, STRCAST("verified"), sizeof("verified") - 1, 0, ZEND_ACC_PUBLIC TSRMLS_CC); - // - // Register the WSConnectionInfo class. - // -#ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "WSSConnectionInfo", NULL); -#else - INIT_CLASS_ENTRY(ce, "Ice_WSSConnectionInfo", NULL); -#endif - ce.create_object = handleConnectionInfoAlloc; - wssConnectionInfoClassEntry = zend_register_internal_class_ex(&ce, sslConnectionInfoClassEntry, NULL TSRMLS_CC); - zend_declare_property_string(wssConnectionInfoClassEntry, STRCAST("headers"), sizeof("headers") - 1, - STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); - - return true; } @@ -653,6 +677,12 @@ IcePHP::fetchConnection(zval* zv, Ice::ConnectionPtr& connection TSRMLS_DC) bool IcePHP::createConnectionInfo(zval* zv, const Ice::ConnectionInfoPtr& p TSRMLS_DC) { + if(!p) + { + ZVAL_NULL(zv); + return true; + } + int status; if(Ice::WSConnectionInfoPtr::dynamicCast(p)) { @@ -674,7 +704,12 @@ IcePHP::createConnectionInfo(zval* zv, const Ice::ConnectionInfoPtr& p TSRMLS_DC } else if(Ice::TCPConnectionInfoPtr::dynamicCast(p)) { - status = object_init_ex(zv, tcpConnectionInfoClassEntry); + Ice::TCPConnectionInfoPtr info = Ice::TCPConnectionInfoPtr::dynamicCast(p); + if((status = object_init_ex(zv, tcpConnectionInfoClassEntry)) == SUCCESS) + { + add_property_long(zv, STRCAST("rcvSize"), static_cast<long>(info->rcvSize)); + add_property_long(zv, STRCAST("sndSize"), static_cast<long>(info->sndSize)); + } } else if(Ice::UDPConnectionInfoPtr::dynamicCast(p)) { @@ -683,24 +718,8 @@ IcePHP::createConnectionInfo(zval* zv, const Ice::ConnectionInfoPtr& p TSRMLS_DC { add_property_string(zv, STRCAST("mcastAddress"), const_cast<char*>(info->mcastAddress.c_str()), 1); add_property_long(zv, STRCAST("mcastPort"), static_cast<long>(info->mcastPort)); - } - } - else if(IceSSL::WSSConnectionInfoPtr::dynamicCast(p)) - { - IceSSL::WSSConnectionInfoPtr info = IceSSL::WSSConnectionInfoPtr::dynamicCast(p); - if((status = object_init_ex(zv, wssConnectionInfoClassEntry)) == SUCCESS) - { - zval* zmap; - MAKE_STD_ZVAL(zmap); - AutoDestroy mapDestroyer(zmap); - if(createStringMap(zmap, info->headers TSRMLS_CC)) - { - add_property_zval(zv, STRCAST("headers"), zmap); - } - else - { - return false; - } + add_property_long(zv, STRCAST("rcvSize"), static_cast<long>(info->rcvSize)); + add_property_long(zv, STRCAST("sndSize"), static_cast<long>(info->sndSize)); } } else if(IceSSL::ConnectionInfoPtr::dynamicCast(p)) @@ -750,10 +769,17 @@ IcePHP::createConnectionInfo(zval* zv, const Ice::ConnectionInfoPtr& p TSRMLS_DC add_property_long(zv, STRCAST("remotePort"), static_cast<long>(info->remotePort)); } + zval* underlying; + MAKE_STD_ZVAL(underlying); + AutoDestroy underlyingDestroyer(underlying); + if(!createConnectionInfo(underlying, p->underlying TSRMLS_CC)) + { + runtimeError("unable to initialize connection info" TSRMLS_CC); + return false; + } + add_property_zval(zv, STRCAST("underlying"), underlying); add_property_bool(zv, STRCAST("incoming"), p->incoming ? 1 : 0); add_property_string(zv, STRCAST("adapterName"), const_cast<char*>(p->adapterName.c_str()), 1); - add_property_long(zv, STRCAST("rcvSize"), static_cast<long>(p->rcvSize)); - add_property_long(zv, STRCAST("sndSize"), static_cast<long>(p->sndSize)); Wrapper<Ice::ConnectionInfoPtr>* obj = Wrapper<Ice::ConnectionInfoPtr>::extract(zv TSRMLS_CC); assert(obj); diff --git a/php/src/php5/Endpoint.cpp b/php/src/php5/Endpoint.cpp index 8f1a8f07bbf..5aab9240dff 100644 --- a/php/src/php5/Endpoint.cpp +++ b/php/src/php5/Endpoint.cpp @@ -28,7 +28,6 @@ static zend_class_entry* udpEndpointInfoClassEntry = 0; static zend_class_entry* wsEndpointInfoClassEntry = 0; static zend_class_entry* opaqueEndpointInfoClassEntry = 0; static zend_class_entry* sslEndpointInfoClassEntry = 0; -static zend_class_entry* wssEndpointInfoClassEntry = 0; // // Ice::Endpoint support. @@ -239,10 +238,10 @@ static zend_function_entry _interfaceMethods[] = // static zend_function_entry _endpointMethods[] = { - ZEND_ME(Ice_Endpoint, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) - ZEND_ME(Ice_Endpoint, __toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Endpoint, toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Endpoint, getInfo, NULL, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Endpoint, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_Endpoint, __toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Endpoint, toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Endpoint, getInfo, ICE_NULLPTR, ZEND_ACC_PUBLIC) {0, 0, 0} }; @@ -251,10 +250,10 @@ static zend_function_entry _endpointMethods[] = // static zend_function_entry _endpointInfoMethods[] = { - ZEND_ME(Ice_EndpointInfo, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) - ZEND_ME(Ice_EndpointInfo, type, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_EndpointInfo, datagram, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_EndpointInfo, secure, NULL, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_EndpointInfo, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_EndpointInfo, type, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_EndpointInfo, datagram, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_EndpointInfo, secure, ICE_NULLPTR, ZEND_ACC_PUBLIC) {0, 0, 0} }; @@ -307,6 +306,8 @@ IcePHP::endpointInit(TSRMLS_D) ce.create_object = handleEndpointInfoAlloc; endpointInfoClassEntry = zend_register_internal_class(&ce TSRMLS_CC); memcpy(&_endpointInfoHandlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + zend_declare_property_null(endpointInfoClassEntry, STRCAST("underlying"), sizeof("underlying") - 1, + ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_long(endpointInfoClassEntry, STRCAST("timeout"), sizeof("timeout") - 1, 0, ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_bool(endpointInfoClassEntry, STRCAST("compress"), sizeof("compress") - 1, 0, @@ -316,12 +317,12 @@ IcePHP::endpointInit(TSRMLS_D) // Define the IPEndpointInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "IPEndpointInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "IPEndpointInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_IPEndpointInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_IPEndpointInfo", ICE_NULLPTR); #endif ce.create_object = handleEndpointInfoAlloc; - ipEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, endpointInfoClassEntry, NULL TSRMLS_CC); + ipEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, endpointInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_string(ipEndpointInfoClassEntry, STRCAST("host"), sizeof("host") - 1, STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_long(ipEndpointInfoClassEntry, STRCAST("port"), sizeof("port") - 1, 0, @@ -333,23 +334,23 @@ IcePHP::endpointInit(TSRMLS_D) // Define the TCPEndpointInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "TCPEndpointInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "TCPEndpointInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_TCPEndpointInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_TCPEndpointInfo", ICE_NULLPTR); #endif ce.create_object = handleEndpointInfoAlloc; - tcpEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, ipEndpointInfoClassEntry, NULL TSRMLS_CC); + tcpEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, ipEndpointInfoClassEntry, ICE_NULLPTR TSRMLS_CC); // // Define the UDPEndpointInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "UDPEndpointInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "UDPEndpointInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_UDPEndpointInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_UDPEndpointInfo", ICE_NULLPTR); #endif ce.create_object = handleEndpointInfoAlloc; - udpEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, ipEndpointInfoClassEntry, NULL TSRMLS_CC); + udpEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, ipEndpointInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_string(udpEndpointInfoClassEntry, STRCAST("mcastInterface"), sizeof("mcastInterface") - 1, STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_long(udpEndpointInfoClassEntry, STRCAST("mcastTtl"), sizeof("mcastTtl") - 1, 0, @@ -359,12 +360,12 @@ IcePHP::endpointInit(TSRMLS_D) // Define the WSEndpointInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "WSEndpointInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "WSEndpointInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_WSEndpointInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_WSEndpointInfo", ICE_NULLPTR); #endif ce.create_object = handleEndpointInfoAlloc; - wsEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, ipEndpointInfoClassEntry, NULL TSRMLS_CC); + wsEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, endpointInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_string(wsEndpointInfoClassEntry, STRCAST("resource"), sizeof("resource") - 1, STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); @@ -372,12 +373,12 @@ IcePHP::endpointInit(TSRMLS_D) // Define the OpaqueEndpointInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "OpaqueEndpointInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "OpaqueEndpointInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_OpaqueEndpointInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_OpaqueEndpointInfo", ICE_NULLPTR); #endif ce.create_object = handleEndpointInfoAlloc; - opaqueEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, endpointInfoClassEntry, NULL TSRMLS_CC); + opaqueEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, endpointInfoClassEntry, ICE_NULLPTR TSRMLS_CC); zend_declare_property_null(opaqueEndpointInfoClassEntry, STRCAST("rawEncoding"), sizeof("rawEncoding") - 1, ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_null(opaqueEndpointInfoClassEntry, STRCAST("rawBytes"), sizeof("rawBytes") - 1, @@ -387,25 +388,12 @@ IcePHP::endpointInit(TSRMLS_D) // Define the SSLEndpointInfo class. // #ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "SSLEndpointInfo", NULL); + INIT_NS_CLASS_ENTRY(ce, "Ice", "SSLEndpointInfo", ICE_NULLPTR); #else - INIT_CLASS_ENTRY(ce, "Ice_SSLEndpointInfo", NULL); + INIT_CLASS_ENTRY(ce, "Ice_SSLEndpointInfo", ICE_NULLPTR); #endif ce.create_object = handleEndpointInfoAlloc; - sslEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, ipEndpointInfoClassEntry, NULL TSRMLS_CC); - - // - // Define the WSSEndpointInfo class. - // -#ifdef ICEPHP_USE_NAMESPACES - INIT_NS_CLASS_ENTRY(ce, "Ice", "WSSEndpointInfo", NULL); -#else - INIT_CLASS_ENTRY(ce, "Ice_WSSEndpointInfo", NULL); -#endif - ce.create_object = handleEndpointInfoAlloc; - wssEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, sslEndpointInfoClassEntry, NULL TSRMLS_CC); - zend_declare_property_string(wssEndpointInfoClassEntry, STRCAST("resource"), sizeof("resource") - 1, - STRCAST(""), ZEND_ACC_PUBLIC TSRMLS_CC); + sslEndpointInfoClassEntry = zend_register_internal_class_ex(&ce, endpointInfoClassEntry, ICE_NULLPTR TSRMLS_CC); return true; } @@ -454,6 +442,12 @@ IcePHP::fetchEndpoint(zval* zv, Ice::EndpointPtr& endpoint TSRMLS_DC) bool IcePHP::createEndpointInfo(zval* zv, const Ice::EndpointInfoPtr& p TSRMLS_DC) { + if(!p) + { + ZVAL_NULL(zv); + return true; + } + int status; if(Ice::WSEndpointInfoPtr::dynamicCast(p)) { @@ -498,14 +492,6 @@ IcePHP::createEndpointInfo(zval* zv, const Ice::EndpointInfoPtr& p TSRMLS_DC) zval_ptr_dtor(&rawBytes); // add_property_zval increased the refcount of rawBytes } } - else if(IceSSL::WSSEndpointInfoPtr::dynamicCast(p)) - { - IceSSL::WSSEndpointInfoPtr info = IceSSL::WSSEndpointInfoPtr::dynamicCast(p); - if((status = object_init_ex(zv, wssEndpointInfoClassEntry)) == SUCCESS) - { - add_property_string(zv, STRCAST("resource"), const_cast<char*>(info->resource.c_str()), 1); - } - } else if(IceSSL::EndpointInfoPtr::dynamicCast(p)) { status = object_init_ex(zv, sslEndpointInfoClassEntry); @@ -533,6 +519,15 @@ IcePHP::createEndpointInfo(zval* zv, const Ice::EndpointInfoPtr& p TSRMLS_DC) add_property_string(zv, STRCAST("sourceAddress"), const_cast<char*>(info->sourceAddress.c_str()), 1); } + zval* underlying; + MAKE_STD_ZVAL(underlying); + AutoDestroy underlyingDestroyer(underlying); + if(!createEndpointInfo(underlying, p->underlying TSRMLS_CC)) + { + runtimeError("unable to initialize endpoint info" TSRMLS_CC); + return false; + } + add_property_zval(zv, STRCAST("underlying"), underlying); add_property_long(zv, STRCAST("timeout"), static_cast<long>(p->timeout)); add_property_bool(zv, STRCAST("compress"), static_cast<long>(p->compress)); diff --git a/php/src/php5/IcePHP.rc b/php/src/php5/IcePHP.rc deleted file mode 100644 index 1cddc72dee2..00000000000 --- a/php/src/php5/IcePHP.rc +++ /dev/null @@ -1,38 +0,0 @@ -#include "winver.h" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,6,3,0 - PRODUCTVERSION 3,6,3,0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG - #define INTERNALNAME "php_iced\0" - #define ORIGINALFILENAME "php_iced.dll\0" -#else - FILEFLAGS 0x0L - #define INTERNALNAME "php_ice\0" - #define ORIGINALFILENAME "php_ice.dll\0" -#endif - FILEOS 0x4L - FILETYPE VFT_DLL - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "ZeroC, Inc.\0" - VALUE "FileDescription", "Ice for PHP Extension\0" - VALUE "FileVersion", "3.6.3\0" - VALUE "InternalName", INTERNALNAME - VALUE "LegalCopyright", "Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.\0" - VALUE "OriginalFilename", ORIGINALFILENAME - VALUE "ProductName", "Ice\0" - VALUE "ProductVersion", "3.6.3\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END diff --git a/php/src/php5/Init.cpp b/php/src/php5/Init.cpp index 28a53649d99..72cc2f548e7 100644 --- a/php/src/php5/Init.cpp +++ b/php/src/php5/Init.cpp @@ -28,80 +28,74 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(Ice_createProperties_arginfo, 1, ZEND_RETURN_VALUE, static_cast<zend_uint>(-1)) ZEND_END_ARG_INFO() -#define ICEPHP_COMMUNICATOR_FUNCTIONS \ - ZEND_FE(Ice_initialize, Ice_initialize_arginfo) \ - ZEND_FE(Ice_register, NULL) \ - ZEND_FE(Ice_unregister, NULL) \ - ZEND_FE(Ice_find, NULL) \ - ZEND_FE(Ice_getProperties, NULL) \ - ZEND_FE(Ice_identityToString, NULL) \ - ZEND_FE(Ice_stringToIdentity, NULL) \ - #ifdef ICEPHP_USE_NAMESPACES -# define ICEPHP_COMMUNICATOR_NS_FUNCTIONS \ - ZEND_NS_FALIAS("Ice", initialize, Ice_initialize, Ice_initialize_arginfo) \ - ZEND_NS_FALIAS("Ice", register, Ice_register, NULL) \ - ZEND_NS_FALIAS("Ice", unregister, Ice_unregister, NULL) \ - ZEND_NS_FALIAS("Ice", find, Ice_find, NULL) \ - ZEND_NS_FALIAS("Ice", getProperties, Ice_getProperties, NULL) \ - ZEND_NS_FALIAS("Ice", identityToString, Ice_identityToString, NULL) \ - ZEND_NS_FALIAS("Ice", stringToIdentity, Ice_stringToIdentity, NULL) +# define ICEPHP_COMMUNICATOR_FUNCTIONS \ + ZEND_NS_NAMED_FE("Ice", initialize, ZEND_FN(Ice_initialize), Ice_initialize_arginfo) \ + ZEND_NS_NAMED_FE("Ice", register, ZEND_FN(Ice_register), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", unregister, ZEND_FN(Ice_unregister), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", find, ZEND_FN(Ice_find), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", getProperties, ZEND_FN(Ice_getProperties), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", identityToString, ZEND_FN(Ice_identityToString), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", stringToIdentity, ZEND_FN(Ice_stringToIdentity), ICE_NULLPTR) #else -# define ICEPHP_COMMUNICATOR_NS_FUNCTIONS +# define ICEPHP_COMMUNICATOR_FUNCTIONS \ + ZEND_FE(Ice_initialize, Ice_initialize_arginfo) \ + ZEND_FE(Ice_register, ICE_NULLPTR) \ + ZEND_FE(Ice_unregister, ICE_NULLPTR) \ + ZEND_FE(Ice_find, ICE_NULLPTR) \ + ZEND_FE(Ice_getProperties, ICE_NULLPTR) \ + ZEND_FE(Ice_identityToString, ICE_NULLPTR) \ + ZEND_FE(Ice_stringToIdentity, ICE_NULLPTR) #endif #define ICEPHP_OPERATION_FUNCTIONS \ - ZEND_FE(IcePHP_defineOperation, NULL) - -#define ICEPHP_PROPERTIES_FUNCTIONS \ - ZEND_FE(Ice_createProperties, Ice_createProperties_arginfo) + ZEND_FE(IcePHP_defineOperation, ICE_NULLPTR) #ifdef ICEPHP_USE_NAMESPACES -# define ICEPHP_PROPERTIES_NS_FUNCTIONS \ - ZEND_NS_FALIAS("Ice", createProperties, Ice_createProperties, Ice_createProperties_arginfo) +# define ICEPHP_PROPERTIES_FUNCTIONS \ + ZEND_NS_NAMED_FE("Ice", createProperties, ZEND_FN(Ice_createProperties), Ice_createProperties_arginfo) #else -# define ICEPHP_PROPERTIES_NS_FUNCTIONS +# define ICEPHP_PROPERTIES_FUNCTIONS \ + ZEND_FE(Ice_createProperties, Ice_createProperties_arginfo) #endif #define ICEPHP_TYPE_FUNCTIONS \ - ZEND_FE(IcePHP_defineEnum, NULL) \ - ZEND_FE(IcePHP_defineStruct, NULL) \ - ZEND_FE(IcePHP_defineSequence, NULL) \ - ZEND_FE(IcePHP_defineDictionary, NULL) \ - ZEND_FE(IcePHP_declareProxy, NULL) \ - ZEND_FE(IcePHP_defineProxy, NULL) \ - ZEND_FE(IcePHP_declareClass, NULL) \ - ZEND_FE(IcePHP_defineClass, NULL) \ - ZEND_FE(IcePHP_defineException, NULL) \ - ZEND_FE(IcePHP_stringify, NULL) \ - ZEND_FE(IcePHP_stringifyException, NULL) - -#define ICEPHP_UTIL_FUNCTIONS \ - ZEND_FE(Ice_stringVersion, NULL) \ - ZEND_FE(Ice_intVersion, NULL) \ - ZEND_FE(Ice_generateUUID, NULL) \ - ZEND_FE(Ice_currentProtocol, NULL) \ - ZEND_FE(Ice_currentProtocolEncoding, NULL) \ - ZEND_FE(Ice_currentEncoding, NULL) \ - ZEND_FE(Ice_protocolVersionToString, NULL) \ - ZEND_FE(Ice_stringToProtocolVersion, NULL) \ - ZEND_FE(Ice_encodingVersionToString, NULL) \ - ZEND_FE(Ice_stringToEncodingVersion, NULL) + ZEND_FE(IcePHP_defineEnum, ICE_NULLPTR) \ + ZEND_FE(IcePHP_defineStruct, ICE_NULLPTR) \ + ZEND_FE(IcePHP_defineSequence, ICE_NULLPTR) \ + ZEND_FE(IcePHP_defineDictionary, ICE_NULLPTR) \ + ZEND_FE(IcePHP_declareProxy, ICE_NULLPTR) \ + ZEND_FE(IcePHP_defineProxy, ICE_NULLPTR) \ + ZEND_FE(IcePHP_declareClass, ICE_NULLPTR) \ + ZEND_FE(IcePHP_defineClass, ICE_NULLPTR) \ + ZEND_FE(IcePHP_defineException, ICE_NULLPTR) \ + ZEND_FE(IcePHP_stringify, ICE_NULLPTR) \ + ZEND_FE(IcePHP_stringifyException, ICE_NULLPTR) #ifdef ICEPHP_USE_NAMESPACES -# define ICEPHP_UTIL_NS_FUNCTIONS \ - ZEND_NS_FALIAS("Ice", stringVersion, Ice_stringVersion, NULL) \ - ZEND_NS_FALIAS("Ice", intVersion, Ice_intVersion, NULL) \ - ZEND_NS_FALIAS("Ice", generateUUID, Ice_generateUUID, NULL) \ - ZEND_NS_FALIAS("Ice", currentProtocol, Ice_currentProtocol, NULL) \ - ZEND_NS_FALIAS("Ice", currentProtocolEncoding, Ice_currentProtocolEncoding, NULL) \ - ZEND_NS_FALIAS("Ice", currentEncoding, Ice_currentEncoding, NULL) \ - ZEND_NS_FALIAS("Ice", protocolVersionToString, Ice_protocolVersionToString, NULL) \ - ZEND_NS_FALIAS("Ice", stringToProtocolVersion, Ice_stringToProtocolVersion, NULL) \ - ZEND_NS_FALIAS("Ice", encodingVersionToString, Ice_encodingVersionToString, NULL) \ - ZEND_NS_FALIAS("Ice", stringToEncodingVersion, Ice_stringToEncodingVersion, NULL) +# define ICEPHP_UTIL_FUNCTIONS \ + ZEND_NS_NAMED_FE("Ice", stringVersion, ZEND_FN(Ice_stringVersion), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", intVersion, ZEND_FN(Ice_intVersion), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", generateUUID, ZEND_FN(Ice_generateUUID), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", currentProtocol, ZEND_FN(Ice_currentProtocol), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", currentProtocolEncoding, ZEND_FN(Ice_currentProtocolEncoding), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", currentEncoding, ZEND_FN(Ice_currentEncoding), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", protocolVersionToString, ZEND_FN(Ice_protocolVersionToString), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", stringToProtocolVersion, ZEND_FN(Ice_stringToProtocolVersion), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", encodingVersionToString, ZEND_FN(Ice_encodingVersionToString), ICE_NULLPTR) \ + ZEND_NS_NAMED_FE("Ice", stringToEncodingVersion, ZEND_FN(Ice_stringToEncodingVersion), ICE_NULLPTR) #else -# define ICEPHP_UTIL_NS_FUNCTIONS +# define ICEPHP_UTIL_FUNCTIONS \ + ZEND_FE(Ice_stringVersion, ICE_NULLPTR) \ + ZEND_FE(Ice_intVersion, ICE_NULLPTR) \ + ZEND_FE(Ice_generateUUID, ICE_NULLPTR) \ + ZEND_FE(Ice_currentProtocol, ICE_NULLPTR) \ + ZEND_FE(Ice_currentProtocolEncoding, ICE_NULLPTR) \ + ZEND_FE(Ice_currentEncoding, ICE_NULLPTR) \ + ZEND_FE(Ice_protocolVersionToString, ICE_NULLPTR) \ + ZEND_FE(Ice_stringToProtocolVersion, ICE_NULLPTR) \ + ZEND_FE(Ice_encodingVersionToString, ICE_NULLPTR) \ + ZEND_FE(Ice_stringToEncodingVersion, ICE_NULLPTR) #endif // @@ -117,13 +111,10 @@ ZEND_END_ARG_INFO() zend_function_entry ice_functions[] = { ICEPHP_COMMUNICATOR_FUNCTIONS - ICEPHP_COMMUNICATOR_NS_FUNCTIONS ICEPHP_OPERATION_FUNCTIONS ICEPHP_PROPERTIES_FUNCTIONS - ICEPHP_PROPERTIES_NS_FUNCTIONS ICEPHP_TYPE_FUNCTIONS ICEPHP_UTIL_FUNCTIONS - ICEPHP_UTIL_NS_FUNCTIONS {0, 0, 0} }; // diff --git a/php/src/php5/Logger.cpp b/php/src/php5/Logger.cpp index 888a95bb672..2c92bda3a71 100644 --- a/php/src/php5/Logger.cpp +++ b/php/src/php5/Logger.cpp @@ -240,13 +240,13 @@ static zend_function_entry _interfaceMethods[] = }; static zend_function_entry _classMethods[] = { - ZEND_ME(Ice_Logger, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) - ZEND_ME(Ice_Logger, __toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Logger, print, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Logger, trace, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Logger, warning, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Logger, error, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Logger, cloneWithPrefix, NULL, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Logger, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_Logger, __toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Logger, print, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Logger, trace, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Logger, warning, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Logger, error, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Logger, cloneWithPrefix, ICE_NULLPTR, ZEND_ACC_PUBLIC) {0, 0, 0} }; // diff --git a/php/src/php5/Makefile b/php/src/php5/Makefile deleted file mode 100644 index 4256b75e41c..00000000000 --- a/php/src/php5/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# ********************************************************************** -# -# Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved. -# -# This copy of Ice is licensed to you under the terms described in the -# ICE_LICENSE file included in this distribution. -# -# ********************************************************************** - -top_srcdir = ../.. - -LIBNAME = $(call mkphplibname,IcePHP) -SONAME = $(LIBNAME) - -TARGETS = $(libdir)/$(LIBNAME) - -OBJS = Communicator.o \ - Connection.o \ - Endpoint.o \ - Init.o \ - Logger.o \ - Operation.o \ - Properties.o \ - Proxy.o \ - Types.o \ - Util.o - -include $(top_srcdir)/config/Make.rules.php - -CPPFLAGS := -I. $(CPPFLAGS) $(ICE_FLAGS) $(shell $(PHP_CONFIG) --includes) - -LINKWITH := $(ICE_LIBS) $(CXXLIBS) - -$(libdir)/$(LIBNAME): $(OBJS) - rm -f $@ - $(call mkshlib,$@,$(SONAME),$(OBJS),$(LINKWITH)) - -install:: all - $(call installphplib,$(libdir)/$(LIBNAME),$(DESTDIR)$(install_libdir)) diff --git a/php/src/php5/Makefile.mak b/php/src/php5/Makefile.mak deleted file mode 100644 index 4abacaddcc9..00000000000 --- a/php/src/php5/Makefile.mak +++ /dev/null @@ -1,53 +0,0 @@ -# ********************************************************************** -# -# Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved. -# -# This copy of Ice is licensed to you under the terms described in the -# ICE_LICENSE file included in this distribution. -# -# ********************************************************************** - -top_srcdir = ..\.. - -LIBNAME = php_ice$(LIBSUFFIX).lib -DLLNAME = $(libdir)\php_ice$(LIBSUFFIX).dll - -TARGETS = $(LIBNAME) $(DLLNAME) - -OBJS = .\Communicator.obj \ - .\Connection.obj \ - .\Endpoint.obj \ - .\Init.obj \ - .\Logger.obj \ - .\Operation.obj \ - .\Properties.obj \ - .\Proxy.obj \ - .\Types.obj \ - .\Util.obj - -!include $(top_srcdir)\config\Make.rules.mak.php - -CPPFLAGS = -I. -I.. $(CPPFLAGS) $(ICE_CPPFLAGS) $(PHP_CPPFLAGS) - -!if "$(ARCH)" == "x86" -CPPFLAGS = $(CPPFLAGS) -D_USE_32BIT_TIME_T -!endif - -!if "$(OPTIMIZE)" != "yes" -PDBFLAGS = /pdb:$(LIBNAME:.lib=.pdb) -!endif - -LINKWITH = $(ICE_LIBS) $(PHP_LIBS) $(CXXLIBS) icediscovery$(LIBSUFFIX).lib icelocatordiscovery$(LIBSUFFIX).lib - -$(LIBNAME): $(DLLNAME) - -$(DLLNAME): $(OBJS) IcePHP.res - $(LINK) $(ICE_LDFLAGS) $(PHP_LDFLAGS) $(LD_DLLFLAGS) $(PDBFLAGS) $(OBJS) \ - $(PREOUT)$(DLLNAME) $(PRELIBS)$(LINKWITH) IcePHP.res - move $(DLLNAME:.dll=.lib) $(LIBNAME) - -clean:: - -del /q IcePHP.res - -install:: all - copy $(DLLNAME) "$(install_libdir)" diff --git a/php/src/php5/Makefile.mk b/php/src/php5/Makefile.mk new file mode 100644 index 00000000000..6c03f15d5f4 --- /dev/null +++ b/php/src/php5/Makefile.mk @@ -0,0 +1,22 @@ +# ********************************************************************** +# +# Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +$(project)_libraries := IcePHP + +IcePHP_target := php-module +IcePHP_targetname := IcePHP +IcePHP_targetdir := lib +IcePHP_installdir := $(install_phplibdir) +IcePHP_cppflags := -I$(project) -I$(top_srcdir)/cpp/src $(php_cpp_includes) $(php_cppflags) +IcePHP_ldflags := $(php_ldflags) +IcePHP_dependencies := IceDiscovery IceLocatorDiscovery IceSSL Ice +IcePHP_extra_sources := $(top_srcdir)/cpp/src/Slice/PHPUtil.cpp + +projects += $(project) +srcs:: $(project) diff --git a/php/src/php5/Operation.cpp b/php/src/php5/Operation.cpp index ebb76389c7c..07003b7b4d6 100644 --- a/php/src/php5/Operation.cpp +++ b/php/src/php5/Operation.cpp @@ -129,7 +129,7 @@ protected: OperationIPtr _op; - bool prepareRequest(int, zval**, Ice::OutputStreamPtr&, pair<const Ice::Byte*, const Ice::Byte*>& TSRMLS_DC); + bool prepareRequest(int, zval**, Ice::OutputStream*, pair<const Ice::Byte*, const Ice::Byte*>& TSRMLS_DC); void unmarshalResults(int, zval**, zval*, const pair<const Ice::Byte*, const Ice::Byte*>& TSRMLS_DC); zval* unmarshalException(const pair<const Ice::Byte*, const Ice::Byte*>& TSRMLS_DC); bool validateException(const ExceptionInfoPtr& TSRMLS_DC) const; @@ -148,11 +148,11 @@ public: virtual void invoke(INTERNAL_FUNCTION_PARAMETERS); }; -class UserExceptionReaderFactoryI : public Ice::UserExceptionReaderFactory +class UserExceptionFactory : public Ice::UserExceptionFactory { public: - UserExceptionReaderFactoryI(const CommunicatorInfoPtr& communicator TSRMLS_DC) : + UserExceptionFactory(const CommunicatorInfoPtr& communicator TSRMLS_DC) : _communicator(communicator) { #ifdef ZTS @@ -160,7 +160,7 @@ public: #endif } - virtual void createAndThrow(const string& id) const + virtual void createAndThrow(const string& id) { ExceptionInfoPtr info = getExceptionInfo(id TSRMLS_CC); if(info) @@ -390,19 +390,19 @@ IcePHP::OperationI::convertParam(zval* p, int pos TSRMLS_DC) { assert(Z_TYPE_P(p) == IS_ARRAY); HashTable* arr = Z_ARRVAL_P(p); - assert(zend_hash_num_elements(arr) == 3); ParamInfoPtr param = new ParamInfo; zval** m; zend_hash_index_find(arr, 0, reinterpret_cast<void**>(&m)); param->type = Wrapper<TypeInfoPtr>::value(*m TSRMLS_CC); - zend_hash_index_find(arr, 1, reinterpret_cast<void**>(&m)); - assert(Z_TYPE_PP(m) == IS_BOOL); - param->optional = Z_BVAL_PP(m) ? true : false; - zend_hash_index_find(arr, 2, reinterpret_cast<void**>(&m)); - assert(Z_TYPE_PP(m) == IS_LONG); - param->tag = Z_LVAL_PP(m); + param->optional = zend_hash_num_elements(arr) > 1; + if(param->optional) + { + zend_hash_index_find(arr, 1, reinterpret_cast<void**>(&m)); + assert(Z_TYPE_PP(m) == IS_LONG); + param->tag = Z_LVAL_PP(m); + } param->pos = pos; return param; @@ -460,7 +460,7 @@ IcePHP::TypedInvocation::TypedInvocation(const Ice::ObjectPrx& prx, const Commun } bool -IcePHP::TypedInvocation::prepareRequest(int argc, zval** args, Ice::OutputStreamPtr& os, +IcePHP::TypedInvocation::prepareRequest(int argc, zval** args, Ice::OutputStream* os, pair<const Ice::Byte*, const Ice::Byte*>& params TSRMLS_DC) { // @@ -488,7 +488,6 @@ IcePHP::TypedInvocation::prepareRequest(int argc, zval** args, Ice::OutputStream // // Marshal the in parameters. // - os = Ice::createOutputStream(_communicator->getCommunicator()); os->startEncapsulation(_prx->ice_getEncodingVersion(), _op->format); ObjectMap objectMap; @@ -537,7 +536,7 @@ IcePHP::TypedInvocation::prepareRequest(int argc, zval** args, Ice::OutputStream if(_op->sendsClasses) { - os->writePendingObjects(); + os->writePendingValues(); } os->endEncapsulation(); @@ -561,17 +560,17 @@ void IcePHP::TypedInvocation::unmarshalResults(int argc, zval** args, zval* ret, const pair<const Ice::Byte*, const Ice::Byte*>& bytes TSRMLS_DC) { - Ice::InputStreamPtr is = Ice::wrapInputStream(_communicator->getCommunicator(), bytes); + Ice::InputStream is(_communicator->getCommunicator(), bytes); // - // Store a pointer to a local SlicedDataUtil object as the stream's closure. + // Store a pointer to a local StreamUtil object as the stream's closure. // This is necessary to support object unmarshaling (see ObjectReader). // - SlicedDataUtil util; - assert(!is->closure()); - is->closure(&util); + StreamUtil util; + assert(!is.getClosure()); + is.setClosure(&util); - is->startEncapsulation(); + is.startEncapsulation(); ParamInfoList::iterator p; @@ -594,7 +593,7 @@ IcePHP::TypedInvocation::unmarshalResults(int argc, zval** args, zval* ret, { ResultCallbackPtr cb = new ResultCallback; outParamCallbacks[info->pos] = cb; - info->type->unmarshal(is, cb, _communicator, 0, 0, false TSRMLS_CC); + info->type->unmarshal(&is, cb, _communicator, 0, 0, false TSRMLS_CC); } } @@ -604,7 +603,7 @@ IcePHP::TypedInvocation::unmarshalResults(int argc, zval** args, zval* ret, if(_op->returnType && !_op->returnType->optional) { retCallback = new ResultCallback; - _op->returnType->type->unmarshal(is, retCallback, _communicator, 0, 0, false TSRMLS_CC); + _op->returnType->type->unmarshal(&is, retCallback, _communicator, 0, 0, false TSRMLS_CC); } // @@ -624,9 +623,9 @@ IcePHP::TypedInvocation::unmarshalResults(int argc, zval** args, zval* ret, outParamCallbacks[info->pos] = cb; } - if(is->readOptional(info->tag, info->type->optionalFormat())) + if(is.readOptional(info->tag, info->type->optionalFormat())) { - info->type->unmarshal(is, cb, _communicator, 0, 0, true TSRMLS_CC); + info->type->unmarshal(&is, cb, _communicator, 0, 0, true TSRMLS_CC); } else { @@ -636,12 +635,12 @@ IcePHP::TypedInvocation::unmarshalResults(int argc, zval** args, zval* ret, if(_op->returnsClasses) { - is->readPendingObjects(); + is.readPendingValues(); } - is->endEncapsulation(); + is.endEncapsulation(); - util.update(TSRMLS_C); + util.updateSlicedData(TSRMLS_C); int i = static_cast<int>(_op->inParams.size()); for(ResultCallbackList::iterator q = outParamCallbacks.begin(); q != outParamCallbacks.end(); ++q, ++i) @@ -668,38 +667,38 @@ IcePHP::TypedInvocation::unmarshalResults(int argc, zval** args, zval* ret, zval* IcePHP::TypedInvocation::unmarshalException(const pair<const Ice::Byte*, const Ice::Byte*>& bytes TSRMLS_DC) { - Ice::InputStreamPtr is = Ice::wrapInputStream(_communicator->getCommunicator(), bytes); + Ice::InputStream is(_communicator->getCommunicator(), bytes); // - // Store a pointer to a local SlicedDataUtil object as the stream's closure. + // Store a pointer to a local StreamUtil object as the stream's closure. // This is necessary to support object unmarshaling (see ObjectReader). // - SlicedDataUtil util; - assert(!is->closure()); - is->closure(&util); + StreamUtil util; + assert(!is.getClosure()); + is.setClosure(&util); - is->startEncapsulation(); + is.startEncapsulation(); try { - Ice::UserExceptionReaderFactoryPtr factory = new UserExceptionReaderFactoryI(_communicator TSRMLS_CC); - is->throwException(factory); + Ice::UserExceptionFactoryPtr factory = new UserExceptionFactory(_communicator TSRMLS_CC); + is.throwException(factory); } catch(const ExceptionReader& r) { - is->endEncapsulation(); + is.endEncapsulation(); zval* ex = r.getException(); ExceptionInfoPtr info = r.getInfo(); if(validateException(info TSRMLS_CC)) { - util.update(TSRMLS_C); + util.updateSlicedData(TSRMLS_C); Ice::SlicedDataPtr slicedData = r.getSlicedData(); if(slicedData) { - SlicedDataUtil::setMember(ex, slicedData TSRMLS_CC); + StreamUtil::setSlicedDataMember(ex, slicedData TSRMLS_CC); } return ex; @@ -771,9 +770,9 @@ IcePHP::SyncTypedInvocation::invoke(INTERNAL_FUNCTION_PARAMETERS) return; } - Ice::OutputStreamPtr os; + Ice::OutputStream os(_prx->ice_getCommunicator()); pair<const Ice::Byte*, const Ice::Byte*> params; - if(!prepareRequest(ZEND_NUM_ARGS(), *args, os, params TSRMLS_CC)) + if(!prepareRequest(ZEND_NUM_ARGS(), *args, &os, params TSRMLS_CC)) { return; } @@ -876,11 +875,13 @@ ZEND_FUNCTION(IcePHP_defineOperation) } TypeInfoPtr type = Wrapper<TypeInfoPtr>::value(cls TSRMLS_CC); - ClassInfoPtr c = ClassInfoPtr::dynamicCast(type); + ProxyInfoPtr c = ProxyInfoPtr::dynamicCast(type); assert(c); - OperationIPtr op = new OperationI(name, static_cast<Ice::OperationMode>(mode), - static_cast<Ice::OperationMode>(sendMode), static_cast<Ice::FormatType>(format), + OperationIPtr op = new OperationI(name, + static_cast<Ice::OperationMode>(mode), + static_cast<Ice::OperationMode>(sendMode), + static_cast<Ice::FormatType>(format), inParams, outParams, returnType, exceptions TSRMLS_CC); c->addOperation(name, op); @@ -889,17 +890,17 @@ ZEND_FUNCTION(IcePHP_defineOperation) ZEND_FUNCTION(IcePHP_Operation_call) { Ice::ObjectPrx proxy; - ClassInfoPtr cls; + ProxyInfoPtr info; CommunicatorInfoPtr comm; #ifndef NDEBUG bool b = #endif - fetchProxy(getThis(), proxy, cls, comm TSRMLS_CC); + fetchProxy(getThis(), proxy, info, comm TSRMLS_CC); assert(b); assert(proxy); - assert(cls); + assert(info); - OperationPtr op = cls->getOperation(get_active_function_name(TSRMLS_C)); + OperationPtr op = info->getOperation(get_active_function_name(TSRMLS_C)); assert(op); // handleGetMethod should have already verified the operation's existence. OperationIPtr opi = OperationIPtr::dynamicCast(op); assert(opi); diff --git a/php/src/php5/Properties.cpp b/php/src/php5/Properties.cpp index 065292c4dfb..9f181f4408a 100644 --- a/php/src/php5/Properties.cpp +++ b/php/src/php5/Properties.cpp @@ -603,21 +603,21 @@ static zend_function_entry _interfaceMethods[] = }; static zend_function_entry _classMethods[] = { - ZEND_ME(Ice_Properties, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) - ZEND_ME(Ice_Properties, __toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getProperty, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getPropertyWithDefault, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getPropertyAsInt, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getPropertyAsIntWithDefault, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getPropertyAsList, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getPropertyAsListWithDefault, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getPropertiesForPrefix, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, setProperty, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, getCommandLineOptions, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, parseCommandLineOptions, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, parseIceCommandLineOptions, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, load, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_Properties, clone, NULL, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_Properties, __toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getProperty, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getPropertyWithDefault, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getPropertyAsInt, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getPropertyAsIntWithDefault, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getPropertyAsList, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getPropertyAsListWithDefault, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getPropertiesForPrefix, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, setProperty, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, getCommandLineOptions, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, parseCommandLineOptions, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, parseIceCommandLineOptions, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, load, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_Properties, clone, ICE_NULLPTR, ZEND_ACC_PUBLIC) {0, 0, 0} }; diff --git a/php/src/php5/Proxy.cpp b/php/src/php5/Proxy.cpp index 25ad7a19d81..5ba77e7e8e1 100644 --- a/php/src/php5/Proxy.cpp +++ b/php/src/php5/Proxy.cpp @@ -67,8 +67,6 @@ static union _zend_function* handleGetMethod(zval**, char*, int, const _zend_lit static int handleCompare(zval*, zval* TSRMLS_DC); } -static ClassInfoPtr lookupClass(const string& TSRMLS_DC); - namespace IcePHP { @@ -79,15 +77,15 @@ class Proxy : public IceUtil::Shared { public: - Proxy(const Ice::ObjectPrx&, const ClassInfoPtr&, const CommunicatorInfoPtr& TSRMLS_DC); + Proxy(const Ice::ObjectPrx&, const ProxyInfoPtr&, const CommunicatorInfoPtr& TSRMLS_DC); ~Proxy(); bool clone(zval*, const Ice::ObjectPrx& TSRMLS_DC); bool cloneUntyped(zval*, const Ice::ObjectPrx& TSRMLS_DC); - static bool create(zval*, const Ice::ObjectPrx&, const ClassInfoPtr&, const CommunicatorInfoPtr& TSRMLS_DC); + static bool create(zval*, const Ice::ObjectPrx&, const ProxyInfoPtr&, const CommunicatorInfoPtr& TSRMLS_DC); Ice::ObjectPrx proxy; - ClassInfoPtr info; + ProxyInfoPtr info; CommunicatorInfoPtr communicator; zval* connection; zval* cachedConnection; @@ -763,7 +761,7 @@ ZEND_METHOD(Ice_ObjectPrx, ice_getRouter) Ice::RouterPrx router = _this->proxy->ice_getRouter(); if(router) { - ClassInfoPtr info = lookupClass("::Ice::Router" TSRMLS_CC); + ProxyInfoPtr info = getProxyInfo("::Ice::Router" TSRMLS_CC); if(!info) { RETURN_NULL(); @@ -801,7 +799,7 @@ ZEND_METHOD(Ice_ObjectPrx, ice_router) } Ice::ObjectPrx proxy; - ClassInfoPtr def; + ProxyInfoPtr def; if(zprx && !fetchProxy(zprx, proxy, def TSRMLS_CC)) { RETURN_NULL(); @@ -847,7 +845,7 @@ ZEND_METHOD(Ice_ObjectPrx, ice_getLocator) Ice::LocatorPrx locator = _this->proxy->ice_getLocator(); if(locator) { - ClassInfoPtr info = lookupClass("::Ice::Locator" TSRMLS_CC); + ProxyInfoPtr info = getProxyInfo("::Ice::Locator" TSRMLS_CC); if(!info) { RETURN_NULL(); @@ -883,7 +881,7 @@ ZEND_METHOD(Ice_ObjectPrx, ice_locator) } Ice::ObjectPrx proxy; - ClassInfoPtr def; + ProxyInfoPtr def; if(zprx && !fetchProxy(zprx, proxy, def TSRMLS_CC)) { RETURN_NULL(); @@ -1194,6 +1192,31 @@ ZEND_METHOD(Ice_ObjectPrx, ice_timeout) } } +ZEND_METHOD(Ice_ObjectPrx, ice_invocationTimeout) +{ + ProxyPtr _this = Wrapper<ProxyPtr>::value(getThis() TSRMLS_CC); + assert(_this); + + try + { + long l; + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("l"), &l) != SUCCESS) + { + RETURN_NULL(); + } + // TODO: range check? + if(!_this->clone(return_value, _this->proxy->ice_invocationTimeout(l) TSRMLS_CC)) + { + RETURN_NULL(); + } + } + catch(const IceUtil::Exception& ex) + { + throwException(ex TSRMLS_CC); + RETURN_NULL(); + } +} + ZEND_METHOD(Ice_ObjectPrx, ice_connectionId) { ProxyPtr _this = Wrapper<ProxyPtr>::value(getThis() TSRMLS_CC); @@ -1290,30 +1313,6 @@ ZEND_METHOD(Ice_ObjectPrx, ice_flushBatchRequests) } } -static ClassInfoPtr -lookupClass(const string& id TSRMLS_DC) -{ - ClassInfoPtr info = getClassInfoById(id TSRMLS_CC); - if(!info) - { - if(!id.empty() && id[id.size() - 1] == '*') - { - info = getClassInfoById(id.substr(0, id.size() - 1) TSRMLS_CC); - } - } - - if(info && !info->defined) - { - runtimeError("%s is declared but not defined" TSRMLS_CC, id.c_str()); - } - else if(!info) - { - runtimeError("no definition found for class or interface %s" TSRMLS_CC, id.c_str()); - } - - return info; -} - static void do_cast(INTERNAL_FUNCTION_PARAMETERS, bool check) { @@ -1359,7 +1358,7 @@ do_cast(INTERNAL_FUNCTION_PARAMETERS, bool check) try { - ClassInfoPtr info = lookupClass(id TSRMLS_CC); + ProxyInfoPtr info = getProxyInfo(id TSRMLS_CC); if(!info) { RETURN_NULL(); @@ -1413,7 +1412,7 @@ ZEND_METHOD(Ice_ObjectPrx, ice_checkedCast) do_cast(INTERNAL_FUNCTION_PARAM_PASSTHRU, true); } -IcePHP::Proxy::Proxy(const Ice::ObjectPrx& p, const ClassInfoPtr& i, const CommunicatorInfoPtr& comm TSRMLS_DC) : +IcePHP::Proxy::Proxy(const Ice::ObjectPrx& p, const ProxyInfoPtr& i, const CommunicatorInfoPtr& comm TSRMLS_DC) : proxy(p), info(i), communicator(comm), connection(0), cachedConnection(0) { #ifdef ZTS @@ -1453,14 +1452,14 @@ IcePHP::Proxy::cloneUntyped(zval* zv, const Ice::ObjectPrx& p TSRMLS_DC) } bool -IcePHP::Proxy::create(zval* zv, const Ice::ObjectPrx& p, const ClassInfoPtr& info, const CommunicatorInfoPtr& comm +IcePHP::Proxy::create(zval* zv, const Ice::ObjectPrx& p, const ProxyInfoPtr& info, const CommunicatorInfoPtr& comm TSRMLS_DC) { - ClassInfoPtr cls = info; - if(!cls) + ProxyInfoPtr prx = info; + if(!prx) { - cls = getClassInfoById("::Ice::Object" TSRMLS_CC); - assert(cls); + prx = getProxyInfo("::Ice::Object" TSRMLS_CC); + assert(prx); } if(object_init_ex(zv, proxyClassEntry) != SUCCESS) @@ -1470,7 +1469,7 @@ IcePHP::Proxy::create(zval* zv, const Ice::ObjectPrx& p, const ClassInfoPtr& inf } Wrapper<ProxyPtr>* obj = Wrapper<ProxyPtr>::extract(zv TSRMLS_CC); - ProxyPtr proxy = new Proxy(p, cls, comm TSRMLS_CC); + ProxyPtr proxy = new Proxy(p, prx, comm TSRMLS_CC); assert(!obj->ptr); obj->ptr = new ProxyPtr(proxy); @@ -1571,7 +1570,7 @@ handleGetMethod(zval** zv, char* method, int len, const _zend_literal* key TSRML assert(obj->ptr); ProxyPtr _this = *obj->ptr; - ClassInfoPtr info = _this->info; + ProxyInfoPtr info = _this->info; assert(info); OperationPtr op = info->getOperation(method); @@ -1635,55 +1634,56 @@ handleCompare(zval* zobj1, zval* zobj2 TSRMLS_DC) // static zend_function_entry _proxyMethods[] = { - ZEND_ME(Ice_ObjectPrx, __construct, NULL, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) - ZEND_ME(Ice_ObjectPrx, __toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getCommunicator, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_toString, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getIdentity, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_identity, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getContext, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_context, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getFacet, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_facet, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getAdapterId, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_adapterId, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getEndpoints, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_endpoints, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getLocatorCacheTimeout, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getConnectionId, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_locatorCacheTimeout, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isConnectionCached, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_connectionCached, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getEndpointSelection, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_endpointSelection, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isSecure, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_secure, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getEncodingVersion, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_encodingVersion, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isPreferSecure, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_preferSecure, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getRouter, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_router, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getLocator, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_locator, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_twoway, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isTwoway, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_oneway, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isOneway, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_batchOneway, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isBatchOneway, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_datagram, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isDatagram, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_batchDatagram, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_isBatchDatagram, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_compress, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_timeout, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_connectionId, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getConnection, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_getCachedConnection, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_flushBatchRequests, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_uncheckedCast, NULL, ZEND_ACC_PUBLIC) - ZEND_ME(Ice_ObjectPrx, ice_checkedCast, NULL, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, __construct, ICE_NULLPTR, ZEND_ACC_PRIVATE|ZEND_ACC_CTOR) + ZEND_ME(Ice_ObjectPrx, __toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getCommunicator, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_toString, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getIdentity, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_identity, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getContext, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_context, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getFacet, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_facet, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getAdapterId, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_adapterId, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getEndpoints, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_endpoints, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getLocatorCacheTimeout, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getConnectionId, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_locatorCacheTimeout, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isConnectionCached, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_connectionCached, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getEndpointSelection, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_endpointSelection, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isSecure, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_secure, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getEncodingVersion, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_encodingVersion, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isPreferSecure, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_preferSecure, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getRouter, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_router, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getLocator, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_locator, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_twoway, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isTwoway, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_oneway, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isOneway, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_batchOneway, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isBatchOneway, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_datagram, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isDatagram, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_batchDatagram, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_isBatchDatagram, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_compress, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_timeout, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_invocationTimeout, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_connectionId, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getConnection, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_getCachedConnection, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_flushBatchRequests, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_uncheckedCast, ICE_NULLPTR, ZEND_ACC_PUBLIC) + ZEND_ME(Ice_ObjectPrx, ice_checkedCast, ICE_NULLPTR, ZEND_ACC_PUBLIC) {0, 0, 0} }; @@ -1724,21 +1724,21 @@ IcePHP::createProxy(zval* zv, const Ice::ObjectPrx& p, const CommunicatorInfoPtr } bool -IcePHP::createProxy(zval* zv, const Ice::ObjectPrx& p, const ClassInfoPtr& info, const CommunicatorInfoPtr& comm +IcePHP::createProxy(zval* zv, const Ice::ObjectPrx& p, const ProxyInfoPtr& info, const CommunicatorInfoPtr& comm TSRMLS_DC) { return Proxy::create(zv, p, info, comm TSRMLS_CC); } bool -IcePHP::fetchProxy(zval* zv, Ice::ObjectPrx& prx, ClassInfoPtr& cls TSRMLS_DC) +IcePHP::fetchProxy(zval* zv, Ice::ObjectPrx& prx, ProxyInfoPtr& info TSRMLS_DC) { CommunicatorInfoPtr comm; - return fetchProxy(zv, prx, cls, comm TSRMLS_CC); + return fetchProxy(zv, prx, info, comm TSRMLS_CC); } bool -IcePHP::fetchProxy(zval* zv, Ice::ObjectPrx& prx, ClassInfoPtr& cls, CommunicatorInfoPtr& comm TSRMLS_DC) +IcePHP::fetchProxy(zval* zv, Ice::ObjectPrx& prx, ProxyInfoPtr& info, CommunicatorInfoPtr& comm TSRMLS_DC) { if(!ZVAL_IS_NULL(zv)) { @@ -1755,7 +1755,7 @@ IcePHP::fetchProxy(zval* zv, Ice::ObjectPrx& prx, ClassInfoPtr& cls, Communicato } assert(obj->ptr); prx = (*obj->ptr)->proxy; - cls = (*obj->ptr)->info; + info = (*obj->ptr)->info; comm = (*obj->ptr)->communicator; } return true; diff --git a/php/src/php5/Proxy.h b/php/src/php5/Proxy.h index a310400df7f..bd1cec725b0 100644 --- a/php/src/php5/Proxy.h +++ b/php/src/php5/Proxy.h @@ -20,9 +20,9 @@ namespace IcePHP bool proxyInit(TSRMLS_D); bool createProxy(zval*, const Ice::ObjectPrx&, const CommunicatorInfoPtr& TSRMLS_DC); -bool createProxy(zval*, const Ice::ObjectPrx&, const ClassInfoPtr&, const CommunicatorInfoPtr& TSRMLS_DC); -bool fetchProxy(zval*, Ice::ObjectPrx&, ClassInfoPtr& TSRMLS_DC); -bool fetchProxy(zval*, Ice::ObjectPrx&, ClassInfoPtr&, CommunicatorInfoPtr& TSRMLS_DC); +bool createProxy(zval*, const Ice::ObjectPrx&, const ProxyInfoPtr&, const CommunicatorInfoPtr& TSRMLS_DC); +bool fetchProxy(zval*, Ice::ObjectPrx&, ProxyInfoPtr& TSRMLS_DC); +bool fetchProxy(zval*, Ice::ObjectPrx&, ProxyInfoPtr&, CommunicatorInfoPtr& TSRMLS_DC); // // Class entry. diff --git a/php/src/php5/Types.cpp b/php/src/php5/Types.cpp index 1a9cca700e4..4e58a36e221 100644 --- a/php/src/php5/Types.cpp +++ b/php/src/php5/Types.cpp @@ -75,8 +75,8 @@ addProxyInfo(const ProxyInfoPtr& p TSRMLS_DC) // // getProxyInfo() // -static IcePHP::ProxyInfoPtr -getProxyInfo(const string& id TSRMLS_DC) +IcePHP::ProxyInfoPtr +IcePHP::getProxyInfo(const string& id TSRMLS_DC) { if(ICE_G(proxyInfoMap)) { @@ -227,38 +227,13 @@ IcePHP::getExceptionInfo(const string& id TSRMLS_DC) return 0; } -namespace IcePHP -{ - -class ReadObjectCallback : public Ice::ReadObjectCallback -{ -public: - - ReadObjectCallback(const ClassInfoPtr&, const UnmarshalCallbackPtr&, zval*, void* TSRMLS_DC); - ~ReadObjectCallback(); - - virtual void invoke(const ::Ice::ObjectPtr&); - -private: - - ClassInfoPtr _info; - UnmarshalCallbackPtr _cb; - zval* _target; - void* _closure; -#if ZTS - TSRMLS_D; -#endif -}; - -} - // -// SlicedDataUtil implementation +// StreamUtil implementation // -zend_class_entry* IcePHP::SlicedDataUtil::_slicedDataType = 0; -zend_class_entry* IcePHP::SlicedDataUtil::_sliceInfoType = 0; +zend_class_entry* IcePHP::StreamUtil::_slicedDataType = 0; +zend_class_entry* IcePHP::StreamUtil::_sliceInfoType = 0; -IcePHP::SlicedDataUtil::~SlicedDataUtil() +IcePHP::StreamUtil::~StreamUtil() { // // Make sure we break any cycles among the ObjectReaders in preserved slices. @@ -269,35 +244,41 @@ IcePHP::SlicedDataUtil::~SlicedDataUtil() for(Ice::SliceInfoSeq::const_iterator q = slicedData->slices.begin(); q != slicedData->slices.end(); ++q) { // - // Don't just call (*q)->objects.clear(), as releasing references - // to the objects could have unexpected side effects. We exchange + // Don't just call (*q)->instances.clear(), as releasing references + // to the instances could have unexpected side effects. We exchange // the vector into a temporary and then let the temporary fall out // of scope. // vector<Ice::ObjectPtr> tmp; - tmp.swap((*q)->objects); + tmp.swap((*q)->instances); } } } void -IcePHP::SlicedDataUtil::add(const ObjectReaderPtr& reader) +IcePHP::StreamUtil::add(const ReadObjectCallbackPtr& callback) +{ + _callbacks.push_back(callback); +} + +void +IcePHP::StreamUtil::add(const ObjectReaderPtr& reader) { assert(reader->getSlicedData()); _readers.insert(reader); } void -IcePHP::SlicedDataUtil::update(TSRMLS_D) +IcePHP::StreamUtil::updateSlicedData(TSRMLS_D) { for(set<ObjectReaderPtr>::iterator p = _readers.begin(); p != _readers.end(); ++p) { - setMember((*p)->getObject(), (*p)->getSlicedData() TSRMLS_CC); + setSlicedDataMember((*p)->getObject(), (*p)->getSlicedData() TSRMLS_CC); } } void -IcePHP::SlicedDataUtil::setMember(zval* obj, const Ice::SlicedDataPtr& slicedData TSRMLS_DC) +IcePHP::StreamUtil::setSlicedDataMember(zval* obj, const Ice::SlicedDataPtr& slicedData TSRMLS_DC) { // // Create a PHP equivalent of the SlicedData object. @@ -393,28 +374,28 @@ IcePHP::SlicedDataUtil::setMember(zval* obj, const Ice::SlicedDataPtr& slicedDat } // - // objects + // instances // - zval* objects; - MAKE_STD_ZVAL(objects); - array_init(objects); - AutoDestroy objectsDestroyer(objects); - if(add_property_zval(slice, STRCAST("objects"), objects) != SUCCESS) + zval* instances; + MAKE_STD_ZVAL(instances); + array_init(instances); + AutoDestroy instancesDestroyer(instances); + if(add_property_zval(slice, STRCAST("instances"), instances) != SUCCESS) { throw AbortMarshaling(); } - for(vector<Ice::ObjectPtr>::const_iterator q = (*p)->objects.begin(); q != (*p)->objects.end(); ++q) + for(vector<Ice::ObjectPtr>::const_iterator q = (*p)->instances.begin(); q != (*p)->instances.end(); ++q) { // - // Each element in the objects list is an instance of ObjectReader that wraps a PHP object. + // Each element in the instances list is an instance of ObjectReader that wraps a PHP object. // assert(*q); ObjectReaderPtr r = ObjectReaderPtr::dynamicCast(*q); assert(r); zval* o = r->getObject(); assert(Z_TYPE_P(o) == IS_OBJECT); // Should be non-nil. - add_next_index_zval(objects, o); // Steals a reference. + add_next_index_zval(instances, o); // Steals a reference. Z_ADDREF_P(o); } @@ -454,7 +435,7 @@ IcePHP::SlicedDataUtil::setMember(zval* obj, const Ice::SlicedDataPtr& slicedDat // named _ice_slicedData which is an instance of the PHP class Ice_SlicedData. // Ice::SlicedDataPtr -IcePHP::SlicedDataUtil::getMember(zval* obj, ObjectMap* objectMap TSRMLS_DC) +IcePHP::StreamUtil::getSlicedDataMember(zval* obj, ObjectMap* objectMap TSRMLS_DC) { Ice::SlicedDataPtr slicedData; @@ -538,11 +519,11 @@ IcePHP::SlicedDataUtil::getMember(zval* obj, ObjectMap* objectMap TSRMLS_DC) #ifndef NDEBUG status = #endif - zend_hash_find(Z_OBJPROP_P(s), STRCAST("objects"), sizeof("objects"), &data); + zend_hash_find(Z_OBJPROP_P(s), STRCAST("instances"), sizeof("instances"), &data); assert(status == SUCCESS); - zval* objects = *(reinterpret_cast<zval**>(data)); - assert(Z_TYPE_P(objects) == IS_ARRAY); - HashTable* oarr = Z_ARRVAL_P(objects); + zval* instances = *(reinterpret_cast<zval**>(data)); + assert(Z_TYPE_P(instances) == IS_ARRAY); + HashTable* oarr = Z_ARRVAL_P(instances); HashPosition opos; zend_hash_internal_pointer_reset_ex(oarr, &opos); @@ -564,7 +545,7 @@ IcePHP::SlicedDataUtil::getMember(zval* obj, ObjectMap* objectMap TSRMLS_DC) writer = i->second; } - info->objects.push_back(writer); + info->instances.push_back(writer); zend_hash_move_forward_ex(oarr, &opos); } @@ -887,7 +868,7 @@ IcePHP::PrimitiveInfo::optionalFormat() const } void -IcePHP::PrimitiveInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap*, bool TSRMLS_DC) +IcePHP::PrimitiveInfo::marshal(zval* zv, Ice::OutputStream* os, ObjectMap*, bool TSRMLS_DC) { switch(kind) { @@ -995,7 +976,7 @@ IcePHP::PrimitiveInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectM } void -IcePHP::PrimitiveInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallbackPtr& cb, +IcePHP::PrimitiveInfo::unmarshal(Ice::InputStream* is, const UnmarshalCallbackPtr& cb, const CommunicatorInfoPtr&, zval* target, void* closure, bool TSRMLS_DC) { zval* zv; @@ -1165,7 +1146,7 @@ IcePHP::EnumInfo::optionalFormat() const } void -IcePHP::EnumInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap*, bool TSRMLS_DC) +IcePHP::EnumInfo::marshal(zval* zv, Ice::OutputStream* os, ObjectMap*, bool TSRMLS_DC) { assert(Z_TYPE_P(zv) == IS_LONG); // validate() should have caught this. const Ice::Int val = static_cast<Ice::Int>(Z_LVAL_P(zv)); @@ -1175,7 +1156,7 @@ IcePHP::EnumInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap*, } void -IcePHP::EnumInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallbackPtr& cb, +IcePHP::EnumInfo::unmarshal(Ice::InputStream* is, const UnmarshalCallbackPtr& cb, const CommunicatorInfoPtr&, zval* target, void* closure, bool TSRMLS_DC) { zval* zv; @@ -1410,7 +1391,7 @@ IcePHP::StructInfo::usesClasses() const } void -IcePHP::StructInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap* objectMap, bool optional TSRMLS_DC) +IcePHP::StructInfo::marshal(zval* zv, Ice::OutputStream* os, ObjectMap* objectMap, bool optional TSRMLS_DC) { assert(Z_TYPE_P(zv) == IS_NULL || (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJCE_P(zv) == zce)); @@ -1474,7 +1455,7 @@ IcePHP::StructInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap* } void -IcePHP::StructInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallbackPtr& cb, +IcePHP::StructInfo::unmarshal(Ice::InputStream* is, const UnmarshalCallbackPtr& cb, const CommunicatorInfoPtr& comm, zval* target, void* closure, bool optional TSRMLS_DC) { zval* zv; @@ -1606,7 +1587,7 @@ IcePHP::SequenceInfo::usesClasses() const } void -IcePHP::SequenceInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap* objectMap, bool optional TSRMLS_DC) +IcePHP::SequenceInfo::marshal(zval* zv, Ice::OutputStream* os, ObjectMap* objectMap, bool optional TSRMLS_DC) { Ice::Int sz = 0; HashTable* arr = 0; @@ -1670,7 +1651,7 @@ IcePHP::SequenceInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMa } void -IcePHP::SequenceInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallbackPtr& cb, +IcePHP::SequenceInfo::unmarshal(Ice::InputStream* is, const UnmarshalCallbackPtr& cb, const CommunicatorInfoPtr& comm, zval* target, void* closure, bool optional TSRMLS_DC) { if(optional) @@ -1766,8 +1747,7 @@ IcePHP::SequenceInfo::destroy() } void -IcePHP::SequenceInfo::marshalPrimitiveSequence(const PrimitiveInfoPtr& pi, zval* zv, const Ice::OutputStreamPtr& os - TSRMLS_DC) +IcePHP::SequenceInfo::marshalPrimitiveSequence(const PrimitiveInfoPtr& pi, zval* zv, Ice::OutputStream* os TSRMLS_DC) { HashTable* arr = Z_ARRVAL_P(zv); @@ -1980,14 +1960,14 @@ IcePHP::SequenceInfo::marshalPrimitiveSequence(const PrimitiveInfoPtr& pi, zval* seq[i++] = s; zend_hash_move_forward_ex(arr, &pos); } - os->write(seq, true); + os->write(seq); break; } } } void -IcePHP::SequenceInfo::unmarshalPrimitiveSequence(const PrimitiveInfoPtr& pi, const Ice::InputStreamPtr& is, +IcePHP::SequenceInfo::unmarshalPrimitiveSequence(const PrimitiveInfoPtr& pi, Ice::InputStream* is, const UnmarshalCallbackPtr& cb, zval* target, void* closure TSRMLS_DC) { zval* zv; @@ -2166,7 +2146,7 @@ IcePHP::DictionaryInfo::usesClasses() const } void -IcePHP::DictionaryInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap* objectMap, bool optional TSRMLS_DC) +IcePHP::DictionaryInfo::marshal(zval* zv, Ice::OutputStream* os, ObjectMap* objectMap, bool optional TSRMLS_DC) { Ice::Int sz = 0; HashTable* arr = 0; @@ -2313,7 +2293,7 @@ IcePHP::DictionaryInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, Object } void -IcePHP::DictionaryInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallbackPtr& cb, +IcePHP::DictionaryInfo::unmarshal(Ice::InputStream* is, const UnmarshalCallbackPtr& cb, const CommunicatorInfoPtr& comm, zval* target, void* closure, bool optional TSRMLS_DC) { if(optional) @@ -2507,17 +2487,17 @@ IcePHP::DictionaryInfo::destroy() // ClassInfo implementation. // IcePHP::ClassInfo::ClassInfo(const string& ident TSRMLS_DC) : - id(ident), compactId(-1), isAbstract(false), preserve(false), zce(0), defined(false) + id(ident), compactId(-1), preserve(false), interface(false), zce(0), defined(false) { } void -IcePHP::ClassInfo::define(const string& n, Ice::Int compact, bool isAbs, bool pres, zval* b, zval* i, zval* m TSRMLS_DC) +IcePHP::ClassInfo::define(const string& n, Ice::Int compact, bool pres, bool intf, zval* b, zval* m TSRMLS_DC) { const_cast<string&>(name) = n; const_cast<Ice::Int&>(compactId) = static_cast<Ice::Int>(compact); - const_cast<bool&>(isAbstract) = isAbs; const_cast<bool&>(preserve) = pres; + const_cast<bool&>(interface) = intf; if(b) { @@ -2526,23 +2506,6 @@ IcePHP::ClassInfo::define(const string& n, Ice::Int compact, bool isAbs, bool pr assert(base); } - if(i) - { - HashTable* interfacesArray = Z_ARRVAL_P(i); - void* data; - HashPosition pos; - zend_hash_internal_pointer_reset_ex(interfacesArray, &pos); - while(zend_hash_get_current_data_ex(interfacesArray, &data, &pos) != FAILURE) - { - zval** interfaceType = reinterpret_cast<zval**>(data); - TypeInfoPtr t = Wrapper<TypeInfoPtr>::value(*interfaceType TSRMLS_CC); - ClassInfoPtr c = ClassInfoPtr::dynamicCast(t); - assert(c); - const_cast<ClassInfoList&>(interfaces).push_back(c); - zend_hash_move_forward_ex(interfacesArray, &pos); - } - } - if(m) { convertDataMembers(m, const_cast<DataMemberList&>(members), const_cast<DataMemberList&>(optionalMembers), @@ -2550,8 +2513,14 @@ IcePHP::ClassInfo::define(const string& n, Ice::Int compact, bool isAbs, bool pr } const_cast<bool&>(defined) = true; - const_cast<zend_class_entry*&>(zce) = nameToClass(name TSRMLS_CC); - assert(zce || id == "::Ice::LocalObject"); // LocalObject does not have a native PHP equivalent. +#ifdef ICEPHP_USE_NAMESPACES + const string valueClass = "Ice\\Value"; +#else + const string valueClass = "Ice_Value"; +#endif + const_cast<zend_class_entry*&>(zce) = nameToClass(interface ? valueClass : name TSRMLS_CC); + // LocalObject and interfaces does not have a native PHP equivalent. + assert(zce || id == "::Ice::LocalObject" || interface); } string @@ -2595,7 +2564,7 @@ IcePHP::ClassInfo::usesClasses() const } void -IcePHP::ClassInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap* objectMap, bool TSRMLS_DC) +IcePHP::ClassInfo::marshal(zval* zv, Ice::OutputStream* os, ObjectMap* objectMap, bool TSRMLS_DC) { if(!defined) { @@ -2605,7 +2574,8 @@ IcePHP::ClassInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap* if(Z_TYPE_P(zv) == IS_NULL) { - os->writeObject(0); + Ice::ObjectPtr nil; + os->write(nil); return; } @@ -2634,11 +2604,24 @@ IcePHP::ClassInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap* // // Give the writer to the stream. The stream will eventually call write() on it. // - os->writeObject(writer); + os->write(writer); +} + +namespace +{ + +void +patchObject(void* addr, const Ice::ObjectPtr& v) +{ + ReadObjectCallback* cb = static_cast<ReadObjectCallback*>(addr); + assert(cb); + cb->invoke(v); +} + } void -IcePHP::ClassInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallbackPtr& cb, +IcePHP::ClassInfo::unmarshal(Ice::InputStream* is, const UnmarshalCallbackPtr& cb, const CommunicatorInfoPtr& comm, zval* target, void* closure, bool TSRMLS_DC) { if(!defined) @@ -2647,7 +2630,16 @@ IcePHP::ClassInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallb throw AbortMarshaling(); } - is->readObject(new ReadObjectCallback(this, cb, target, closure TSRMLS_CC)); + // + // This callback is notified when the Slice value is actually read. The StreamUtil object + // attached to the stream keeps a reference to the callback object to ensure it lives + // long enough. + // + ReadObjectCallbackPtr rocb = new ReadObjectCallback(this, cb, target, closure TSRMLS_CC); + StreamUtil* util = reinterpret_cast<StreamUtil*>(is->getClosure()); + assert(util); + util->add(rocb); + is->read(patchObject, rocb.get()); } void @@ -2686,7 +2678,6 @@ void IcePHP::ClassInfo::destroy() { const_cast<ClassInfoPtr&>(base) = 0; - const_cast<ClassInfoList&>(interfaces).clear(); if(!members.empty()) { DataMemberList ml = members; @@ -2758,63 +2749,44 @@ IcePHP::ClassInfo::isA(const string& typeId) const return true; } - if(base && base->isA(typeId)) - { - return true; - } - - for(ClassInfoList::const_iterator p = interfaces.begin(); p != interfaces.end(); ++p) - { - if((*p)->isA(typeId)) - { - return true; - } - } - - return false; + return base && base->isA(typeId); } -void -IcePHP::ClassInfo::addOperation(const string& name, const OperationPtr& op) +// +// ProxyInfo implementation. +// +IcePHP::ProxyInfo::ProxyInfo(const string& ident TSRMLS_DC) : + id(ident), defined(false) { - operations.insert(OperationMap::value_type(Slice::PHP::fixIdent(name), op)); } -IcePHP::OperationPtr -IcePHP::ClassInfo::getOperation(const string& name) const +void +IcePHP::ProxyInfo::define(zval* b, zval* i TSRMLS_DC) { - OperationPtr op; - OperationMap::const_iterator p = operations.find(name); - if(p != operations.end()) - { - op = p->second; - } - if(!op && base) + if(b) { - op = base->getOperation(name); + TypeInfoPtr p = Wrapper<TypeInfoPtr>::value(b); + const_cast<ProxyInfoPtr&>(base) = ProxyInfoPtr::dynamicCast(p); + assert(base); } - if(!op && !interfaces.empty()) + + if(i) { - for(ClassInfoList::const_iterator q = interfaces.begin(); q != interfaces.end() && !op; ++q) + HashTable* interfacesArray = Z_ARRVAL_P(i); + void* data; + HashPosition pos; + zend_hash_internal_pointer_reset_ex(interfacesArray, &pos); + while(zend_hash_get_current_data_ex(interfacesArray, &data, &pos) != FAILURE) { - op = (*q)->getOperation(name); + zval** interfaceType = reinterpret_cast<zval**>(data); + TypeInfoPtr t = Wrapper<TypeInfoPtr>::value(*interfaceType TSRMLS_CC); + ProxyInfoPtr c = ProxyInfoPtr::dynamicCast(t); + assert(c); + const_cast<ProxyInfoList&>(interfaces).push_back(c); + zend_hash_move_forward_ex(interfacesArray, &pos); } } - return op; -} -// -// ProxyInfo implementation. -// -IcePHP::ProxyInfo::ProxyInfo(const string& ident TSRMLS_DC) : - id(ident), defined(false) -{ -} - -void -IcePHP::ProxyInfo::define(const ClassInfoPtr& c TSRMLS_DC) -{ - const_cast<ClassInfoPtr&>(cls) = c; const_cast<bool&>(defined) = true; } @@ -2862,7 +2834,7 @@ IcePHP::ProxyInfo::optionalFormat() const } void -IcePHP::ProxyInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap*, bool optional TSRMLS_DC) +IcePHP::ProxyInfo::marshal(zval* zv, Ice::OutputStream* os, ObjectMap*, bool optional TSRMLS_DC) { Ice::OutputStream::size_type sizePos = 0; if(optional) @@ -2878,7 +2850,7 @@ IcePHP::ProxyInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap*, { assert(Z_TYPE_P(zv) == IS_OBJECT && Z_OBJCE_P(zv) == proxyClassEntry); // validate() should have caught this. Ice::ObjectPrx proxy; - ClassInfoPtr info; + ProxyInfoPtr info; if(!fetchProxy(zv, proxy, info TSRMLS_CC)) { throw AbortMarshaling(); @@ -2898,7 +2870,7 @@ IcePHP::ProxyInfo::marshal(zval* zv, const Ice::OutputStreamPtr& os, ObjectMap*, } void -IcePHP::ProxyInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallbackPtr& cb, +IcePHP::ProxyInfo::unmarshal(Ice::InputStream* is, const UnmarshalCallbackPtr& cb, const CommunicatorInfoPtr& comm, zval* target, void* closure, bool optional TSRMLS_DC) { zval* zv; @@ -2920,13 +2892,13 @@ IcePHP::ProxyInfo::unmarshal(const Ice::InputStreamPtr& is, const UnmarshalCallb return; } - if(!cls->defined) + if(!defined) { - runtimeError("class or interface %s is declared but not defined" TSRMLS_CC, id.c_str()); + runtimeError("proxy %s is declared but not defined" TSRMLS_CC, id.c_str()); throw AbortMarshaling(); } - if(!createProxy(zv, proxy, cls, comm TSRMLS_CC)) + if(!createProxy(zv, proxy, this, comm TSRMLS_CC)) { throw AbortMarshaling(); } @@ -2949,8 +2921,8 @@ IcePHP::ProxyInfo::print(zval* zv, IceUtilInternal::Output& out, PrintObjectHist else { Ice::ObjectPrx proxy; - ClassInfoPtr cls; - if(!fetchProxy(zv, proxy, cls TSRMLS_CC)) + ProxyInfoPtr info; + if(!fetchProxy(zv, proxy, info TSRMLS_CC)) { return; } @@ -2961,14 +2933,68 @@ IcePHP::ProxyInfo::print(zval* zv, IceUtilInternal::Output& out, PrintObjectHist void IcePHP::ProxyInfo::destroy() { - const_cast<ClassInfoPtr&>(cls) = 0; + const_cast<ProxyInfoPtr&>(base) = 0; + const_cast<ProxyInfoList&>(interfaces).clear(); +} + +bool +IcePHP::ProxyInfo::isA(const string& typeId) const +{ + if(id == typeId) + { + return true; + } + + if(base && base->isA(typeId)) + { + return true; + } + + for(ProxyInfoList::const_iterator p = interfaces.begin(); p != interfaces.end(); ++p) + { + if((*p)->isA(typeId)) + { + return true; + } + } + + return false; +} + +void +IcePHP::ProxyInfo::addOperation(const string& name, const OperationPtr& op) +{ + operations.insert(OperationMap::value_type(Slice::PHP::fixIdent(name), op)); +} + +IcePHP::OperationPtr +IcePHP::ProxyInfo::getOperation(const string& name) const +{ + OperationPtr op; + OperationMap::const_iterator p = operations.find(name); + if(p != operations.end()) + { + op = p->second; + } + if(!op && base) + { + op = base->getOperation(name); + } + if(!op && !interfaces.empty()) + { + for(ProxyInfoList::const_iterator q = interfaces.begin(); q != interfaces.end() && !op; ++q) + { + op = (*q)->getOperation(name); + } + } + return op; } // // ObjectWriter implementation. // IcePHP::ObjectWriter::ObjectWriter(zval* object, ObjectMap* objectMap, const ClassInfoPtr& formal TSRMLS_DC) : - _object(object), _map(objectMap) + _object(object), _map(objectMap), _formal(formal) { #ifdef ZTS this->TSRMLS_C = TSRMLS_C; @@ -2976,15 +3002,18 @@ IcePHP::ObjectWriter::ObjectWriter(zval* object, ObjectMap* objectMap, const Cla Z_ADDREF_P(_object); - // - // We need to determine the most-derived Slice type supported by this object. - // This is typically a Slice class, but it can also be an interface. - // - // The caller may have provided a ClassInfo representing the formal type, in - // which case we ensure that the actual type is compatible with the formal type. - // - _info = getClassInfoByClass(Z_OBJCE_P(object), formal ? const_cast<zend_class_entry*>(formal->zce) : 0 TSRMLS_CC); - assert(_info); + if(!_formal || !_formal->interface) + { + // + // For no interface types We need to determine the most-derived Slice type supported by this object. + // This is typically a Slice class, but it can also be an interface. + // + // The caller may have provided a ClassInfo representing the formal type, in + // which case we ensure that the actual type is compatible with the formal type. + // + _info = getClassInfoByClass(Z_OBJCE_P(object), formal ? const_cast<zend_class_entry*>(formal->zce) : 0 TSRMLS_CC); + assert(_info); + } } IcePHP::ObjectWriter::~ObjectWriter() @@ -3006,43 +3035,92 @@ IcePHP::ObjectWriter::ice_preMarshal() } void -IcePHP::ObjectWriter::write(const Ice::OutputStreamPtr& os) const +IcePHP::ObjectWriter::_iceWrite(Ice::OutputStream* os) const { Ice::SlicedDataPtr slicedData; - if(_info->preserve) + if(_info && _info->preserve) { // // Retrieve the SlicedData object that we stored as a hidden member of the PHP object. // - slicedData = SlicedDataUtil::getMember(_object, const_cast<ObjectMap*>(_map) TSRMLS_CC); + slicedData = StreamUtil::getSlicedDataMember(_object, const_cast<ObjectMap*>(_map) TSRMLS_CC); } - os->startObject(slicedData); + os->startValue(slicedData); - if(_info->id != "::Ice::UnknownSlicedObject") + if(_formal && _formal->interface) { - ClassInfoPtr info = _info; - while(info && info->id != Ice::Object::ice_staticId()) + // + // For an interface by value we just marshal the Ice type id + // of the object in its own slice. + // + zval* ret = 0; + + zend_try + { + const char* func = "ice_id"; + zval* obj = const_cast<zval*>(_object); + zend_call_method(&obj, 0, 0, const_cast<char*>(func), static_cast<int>(strlen(func)), &ret, 0, 0, + 0 TSRMLS_CC); + } + zend_catch { - assert(info->base); // All classes have the Ice::Object base type. - const bool lastSlice = info->base->id == Ice::Object::ice_staticId(); - os->startSlice(info->id, info->compactId, lastSlice); + ret = 0; + } + zend_end_try(); - writeMembers(os, info->members); - writeMembers(os, info->optionalMembers); // The optional members have already been sorted by tag. + // + // Bail out if an exception has already been thrown. + // + if(!ret || EG(exception)) + { + throw AbortMarshaling(); + } - os->endSlice(); + AutoDestroy destroy(ret); + + if(Z_TYPE_P(ret) != IS_STRING) + { + throw AbortMarshaling(); + } - info = info->base; + string id(Z_STRVAL_P(ret), Z_STRLEN_P(ret)); + os->startSlice(id, -1, true); + os->endSlice(); + } + else + { + if(_info->id != "::Ice::UnknownSlicedValue") + { + ClassInfoPtr info = _info; + while(info && info->id != Ice::Object::ice_staticId()) + { + assert(info->base); // All classes have the Ice::Object base type. + const bool lastSlice = info->base->id == Ice::Object::ice_staticId(); + os->startSlice(info->id, info->compactId, lastSlice); + + writeMembers(os, info->members); + writeMembers(os, info->optionalMembers); // The optional members have already been sorted by tag. + + os->endSlice(); + + info = info->base; + } } } - os->endObject(); + os->endValue(); +} + +void +IcePHP::ObjectWriter::_iceRead(Ice::InputStream*) +{ + assert(false); } void -IcePHP::ObjectWriter::writeMembers(const Ice::OutputStreamPtr& os, const DataMemberList& members) const +IcePHP::ObjectWriter::writeMembers(Ice::OutputStream* os, const DataMemberList& members) const { for(DataMemberList::const_iterator q = members.begin(); q != members.end(); ++q) { @@ -3107,11 +3185,17 @@ IcePHP::ObjectReader::ice_postUnmarshal() } void -IcePHP::ObjectReader::read(const Ice::InputStreamPtr& is) +IcePHP::ObjectReader::_iceWrite(Ice::OutputStream*) const +{ + assert(false); +} + +void +IcePHP::ObjectReader::_iceRead(Ice::InputStream* is) { - is->startObject(); + is->startValue(); - const bool unknown = _info->id == "::Ice::UnknownSlicedObject"; + const bool unknown = _info->id == "::Ice::UnknownSlicedValue"; // // Unmarshal the slices of a user-defined class. @@ -3157,11 +3241,11 @@ IcePHP::ObjectReader::read(const Ice::InputStreamPtr& is) } } - _slicedData = is->endObject(_info->preserve); + _slicedData = is->endValue(_info->preserve); if(_slicedData) { - SlicedDataUtil* util = reinterpret_cast<SlicedDataUtil*>(is->closure()); + StreamUtil* util = reinterpret_cast<StreamUtil*>(is->getClosure()); assert(util); util->add(this); @@ -3241,7 +3325,7 @@ IcePHP::ReadObjectCallback::invoke(const Ice::ObjectPtr& p) // Verify that the unmarshaled object is compatible with the formal type. // zval* obj = reader->getObject(); - if(!reader->getInfo()->isA(_info->id)) + if(!_info->interface && !reader->getInfo()->isA(_info->id)) { Ice::UnexpectedObjectException ex(__FILE__, __LINE__); ex.reason = "unmarshaled object is not an instance of " + _info->id; @@ -3266,7 +3350,7 @@ IcePHP::ReadObjectCallback::invoke(const Ice::ObjectPtr& p) // ExceptionInfo implementation. // zval* -IcePHP::ExceptionInfo::unmarshal(const Ice::InputStreamPtr& is, const CommunicatorInfoPtr& comm TSRMLS_DC) +IcePHP::ExceptionInfo::unmarshal(Ice::InputStream* is, const CommunicatorInfoPtr& comm TSRMLS_DC) { zval* zv; MAKE_STD_ZVAL(zv); @@ -3431,7 +3515,7 @@ IcePHP::ExceptionInfo::isA(const string& typeId) const // IcePHP::ExceptionReader::ExceptionReader(const CommunicatorInfoPtr& communicatorInfo, const ExceptionInfoPtr& info TSRMLS_DC) : - Ice::UserExceptionReader(communicatorInfo->getCommunicator()), _communicatorInfo(communicatorInfo), _info(info) + _communicatorInfo(communicatorInfo), _info(info) { #ifdef ZTS this->TSRMLS_C = TSRMLS_C; @@ -3443,24 +3527,8 @@ IcePHP::ExceptionReader::~ExceptionReader() { } -void -IcePHP::ExceptionReader::read(const Ice::InputStreamPtr& is) const -{ - is->startException(); - - const_cast<zval*&>(_ex) = _info->unmarshal(is, _communicatorInfo TSRMLS_CC); - - const_cast<Ice::SlicedDataPtr&>(_slicedData) = is->endException(_info->preserve); -} - -bool -IcePHP::ExceptionReader::usesClasses() const -{ - return _info->usesClasses; -} - string -IcePHP::ExceptionReader::ice_name() const +IcePHP::ExceptionReader::ice_id() const { return _info->id; } @@ -3478,6 +3546,28 @@ IcePHP::ExceptionReader::ice_throw() const throw *this; } +void +IcePHP::ExceptionReader::_write(Ice::OutputStream*) const +{ + assert(false); +} + +void +IcePHP::ExceptionReader::_read(Ice::InputStream* is) +{ + is->startException(); + + const_cast<zval*&>(_ex) = _info->unmarshal(is, _communicatorInfo TSRMLS_CC); + + const_cast<Ice::SlicedDataPtr&>(_slicedData) = is->endException(_info->preserve); +} + +bool +IcePHP::ExceptionReader::_usesClasses() const +{ + return _info->usesClasses; +} + ExceptionInfoPtr IcePHP::ExceptionReader::getInfo() const { @@ -3673,25 +3763,26 @@ ZEND_FUNCTION(IcePHP_declareProxy) ZEND_FUNCTION(IcePHP_defineProxy) { - zval* cls; + char* id; + size_t idLen; + zval* base; + zval* interfaces; - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("o"), &cls) == FAILURE) + + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("so!a!"), &id, &idLen, &base, &interfaces) == + FAILURE) { return; } - TypeInfoPtr p = Wrapper<TypeInfoPtr>::value(cls TSRMLS_CC); - ClassInfoPtr c = ClassInfoPtr::dynamicCast(p); - assert(c); - - ProxyInfoPtr type = getProxyInfo(c->id TSRMLS_CC); + ProxyInfoPtr type = getProxyInfo(id TSRMLS_CC); if(!type) { - type = new ProxyInfo(c->id TSRMLS_CC); + type = new ProxyInfo(id TSRMLS_CC); addProxyInfo(type TSRMLS_CC); } - type->define(c TSRMLS_CC); + type->define(base, interfaces TSRMLS_CC); if(!createTypeInfo(return_value, type TSRMLS_CC)) { @@ -3729,14 +3820,13 @@ ZEND_FUNCTION(IcePHP_defineClass) char* name; int nameLen; long compactId; - zend_bool isAbstract; zend_bool preserve; + zend_bool interface; zval* base; - zval* interfaces; zval* members; - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("sslbbo!a!a!"), &id, &idLen, &name, &nameLen, - &compactId, &isAbstract, &preserve, &base, &interfaces, &members) == FAILURE) + if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, const_cast<char*>("sslbbo!a!"), &id, &idLen, &name, &nameLen, + &compactId, &preserve, &interface, &base, &members) == FAILURE) { return; } @@ -3748,17 +3838,23 @@ ZEND_FUNCTION(IcePHP_defineClass) addClassInfoById(type TSRMLS_CC); } - type->define(name, static_cast<Ice::Int>(compactId), isAbstract ? true : false, preserve ? true : false, base, - interfaces, members TSRMLS_CC); - addClassInfoByName(type TSRMLS_CC); + type->define(name, static_cast<Ice::Int>(compactId), preserve ? true : false, interface ? true : false, base, + members TSRMLS_CC); + if(!interface) + { + addClassInfoByName(type TSRMLS_CC); + } - CompactIdMap* m = reinterpret_cast<CompactIdMap*>(ICE_G(compactIdToClassInfoMap)); - if(!m) + if(type->compactId != -1) { - m = new CompactIdMap; - ICE_G(compactIdToClassInfoMap) = m; + CompactIdMap* m = reinterpret_cast<CompactIdMap*>(ICE_G(compactIdToClassInfoMap)); + if(!m) + { + m = new CompactIdMap; + ICE_G(compactIdToClassInfoMap) = m; + } + m->insert(CompactIdMap::value_type(type->compactId, type)); } - m->insert(CompactIdMap::value_type(type->compactId, type)); if(!createTypeInfo(return_value, type TSRMLS_CC)) { diff --git a/php/src/php5/Types.h b/php/src/php5/Types.h index 83b3e6bc144..956bd8fa9af 100644 --- a/php/src/php5/Types.h +++ b/php/src/php5/Types.h @@ -13,7 +13,6 @@ #include <Config.h> #include <Communicator.h> #include <Operation.h> -#include <Ice/Stream.h> #include <IceUtil/OutputUtil.h> // @@ -44,35 +43,18 @@ class AbortMarshaling { }; +class ClassInfo; +typedef IceUtil::Handle<ClassInfo> ClassInfoPtr; + +class ProxyInfo; +typedef IceUtil::Handle<ProxyInfo> ProxyInfoPtr; +typedef std::vector<ProxyInfoPtr> ProxyInfoList; + typedef std::map<unsigned int, Ice::ObjectPtr> ObjectMap; class ObjectReader; typedef IceUtil::Handle<ObjectReader> ObjectReaderPtr; -// -// This class keeps track of PHP objects (instances of Slice classes -// and exceptions) that have preserved slices. -// -class SlicedDataUtil -{ -public: - - ~SlicedDataUtil(); - - void add(const ObjectReaderPtr&); - - void update(TSRMLS_D); - - static void setMember(zval*, const Ice::SlicedDataPtr& TSRMLS_DC); - static Ice::SlicedDataPtr getMember(zval*, ObjectMap* TSRMLS_DC); - -private: - - std::set<ObjectReaderPtr> _readers; - static zend_class_entry* _slicedDataType; - static zend_class_entry* _sliceInfoType; -}; - struct PrintObjectHistory { int index; @@ -103,6 +85,64 @@ public: typedef IceUtil::Handle<UnmarshalCallback> UnmarshalCallbackPtr; // +// ReadObjectCallback retains all of the information necessary to store an unmarshaled +// Slice value as a PHP object. +// +class ReadObjectCallback : public IceUtil::Shared +{ +public: + + ReadObjectCallback(const ClassInfoPtr&, const UnmarshalCallbackPtr&, zval*, void* TSRMLS_DC); + ~ReadObjectCallback(); + + virtual void invoke(const ::Ice::ObjectPtr&); + +private: + + ClassInfoPtr _info; + UnmarshalCallbackPtr _cb; + zval* _target; + void* _closure; +#if ZTS + TSRMLS_D; +#endif +}; +typedef IceUtil::Handle<ReadObjectCallback> ReadObjectCallbackPtr; + +// +// This class keeps track of PHP objects (instances of Slice classes +// and exceptions) that have preserved slices. +// +class StreamUtil +{ +public: + + ~StreamUtil(); + + // + // Keep a reference to a ReadObjectCallback for patching purposes. + // + void add(const ReadObjectCallbackPtr&); + + // + // Keep track of object instances that have preserved slices. + // + void add(const ObjectReaderPtr&); + + void updateSlicedData(TSRMLS_D); + + static void setSlicedDataMember(zval*, const Ice::SlicedDataPtr& TSRMLS_DC); + static Ice::SlicedDataPtr getSlicedDataMember(zval*, ObjectMap* TSRMLS_DC); + +private: + + std::vector<ReadObjectCallbackPtr> _callbacks; + std::set<ObjectReaderPtr> _readers; + static zend_class_entry* _slicedDataType; + static zend_class_entry* _sliceInfoType; +}; + +// // Base class for type information. // class TypeInfo : public UnmarshalCallback @@ -133,8 +173,8 @@ public: // The marshal and unmarshal functions can raise Ice exceptions, and may raise // AbortMarshaling if an error occurs. // - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC) = 0; - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC) = 0; + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC) = 0; virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC) = 0; @@ -156,8 +196,8 @@ public: virtual int wireSize() const; virtual Ice::OptionalFormat optionalFormat() const; - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC); - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC); + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC); virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); @@ -195,8 +235,8 @@ public: virtual int wireSize() const; virtual Ice::OptionalFormat optionalFormat() const; - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC); - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC); + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC); virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); @@ -243,8 +283,8 @@ public: virtual bool usesClasses() const; - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC); - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC); + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC); virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); @@ -283,8 +323,8 @@ public: virtual bool usesClasses() const; - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC); - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC); + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC); virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); @@ -298,8 +338,8 @@ public: private: - void marshalPrimitiveSequence(const PrimitiveInfoPtr&, zval*, const Ice::OutputStreamPtr& TSRMLS_DC); - void unmarshalPrimitiveSequence(const PrimitiveInfoPtr&, const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, + void marshalPrimitiveSequence(const PrimitiveInfoPtr&, zval*, Ice::OutputStream* TSRMLS_DC); + void unmarshalPrimitiveSequence(const PrimitiveInfoPtr&, Ice::InputStream*, const UnmarshalCallbackPtr&, zval*, void* TSRMLS_DC); }; typedef IceUtil::Handle<SequenceInfo> SequenceInfoPtr; @@ -323,8 +363,8 @@ public: virtual bool usesClasses() const; - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC); - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC); + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC); virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); @@ -372,10 +412,6 @@ class ExceptionInfo; typedef IceUtil::Handle<ExceptionInfo> ExceptionInfoPtr; typedef std::vector<ExceptionInfoPtr> ExceptionInfoList; -class ClassInfo; -typedef IceUtil::Handle<ClassInfo> ClassInfoPtr; -typedef std::vector<ClassInfoPtr> ClassInfoList; - typedef std::vector<TypeInfoPtr> TypeInfoList; class ClassInfo : public TypeInfo @@ -384,7 +420,7 @@ public: ClassInfo(const std::string& TSRMLS_DC); - void define(const std::string&, Ice::Int, bool, bool, zval*, zval*, zval* TSRMLS_DC); + void define(const std::string&, Ice::Int, bool, bool, zval*, zval* TSRMLS_DC); virtual std::string getId() const; @@ -396,8 +432,8 @@ public: virtual bool usesClasses() const; - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC); - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC); + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC); virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); @@ -408,23 +444,16 @@ public: bool isA(const std::string&) const; - void addOperation(const std::string&, const OperationPtr&); - OperationPtr getOperation(const std::string&) const; - const std::string id; const std::string name; // PHP class name const Ice::Int compactId; - const bool isAbstract; const bool preserve; + const bool interface; const ClassInfoPtr base; - const ClassInfoList interfaces; const DataMemberList members; const DataMemberList optionalMembers; const zend_class_entry* zce; bool defined; - - typedef std::map<std::string, OperationPtr> OperationMap; - OperationMap operations; }; // @@ -436,7 +465,7 @@ public: ProxyInfo(const std::string& TSRMLS_DC); - void define(const ClassInfoPtr& TSRMLS_DC); + void define(zval*, zval* TSRMLS_DC); virtual std::string getId() const; @@ -446,17 +475,25 @@ public: virtual int wireSize() const; virtual Ice::OptionalFormat optionalFormat() const; - virtual void marshal(zval*, const Ice::OutputStreamPtr&, ObjectMap*, bool TSRMLS_DC); - virtual void unmarshal(const Ice::InputStreamPtr&, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, + virtual void marshal(zval*, Ice::OutputStream*, ObjectMap*, bool TSRMLS_DC); + virtual void unmarshal(Ice::InputStream*, const UnmarshalCallbackPtr&, const CommunicatorInfoPtr&, zval*, void*, bool TSRMLS_DC); virtual void print(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); virtual void destroy(); + bool isA(const std::string&) const; + + void addOperation(const std::string&, const OperationPtr&); + OperationPtr getOperation(const std::string&) const; + const std::string id; - const ClassInfoPtr cls; + const ProxyInfoPtr base; + const ProxyInfoList interfaces; bool defined; + typedef std::map<std::string, OperationPtr> OperationMap; + OperationMap operations; }; typedef IceUtil::Handle<ProxyInfo> ProxyInfoPtr; @@ -467,7 +504,7 @@ class ExceptionInfo : public IceUtil::Shared { public: - zval* unmarshal(const Ice::InputStreamPtr&, const CommunicatorInfoPtr& TSRMLS_DC); + zval* unmarshal(Ice::InputStream*, const CommunicatorInfoPtr& TSRMLS_DC); void print(zval*, IceUtilInternal::Output& TSRMLS_DC); void printMembers(zval*, IceUtilInternal::Output&, PrintObjectHistory* TSRMLS_DC); @@ -486,6 +523,7 @@ public: ClassInfoPtr getClassInfoById(const std::string& TSRMLS_DC); ClassInfoPtr getClassInfoByName(const std::string& TSRMLS_DC); +ProxyInfoPtr getProxyInfo(const std::string& TSRMLS_DC); ExceptionInfoPtr getExceptionInfo(const std::string& TSRMLS_DC); bool isUnset(zval* TSRMLS_DC); @@ -498,7 +536,7 @@ bool typesRequestShutdown(TSRMLS_D); // // ObjectWriter wraps a PHP object for marshaling. // -class ObjectWriter : public Ice::ObjectWriter +class ObjectWriter : public Ice::Object { public: @@ -507,15 +545,17 @@ public: virtual void ice_preMarshal(); - virtual void write(const Ice::OutputStreamPtr&) const; + virtual void _iceWrite(Ice::OutputStream*) const; + virtual void _iceRead(Ice::InputStream*); private: - void writeMembers(const Ice::OutputStreamPtr&, const DataMemberList&) const; + void writeMembers(Ice::OutputStream*, const DataMemberList&) const; zval* _object; ObjectMap* _map; ClassInfoPtr _info; + ClassInfoPtr _formal; #if ZTS TSRMLS_D; #endif @@ -524,7 +564,7 @@ private: // // ObjectReader unmarshals the state of an Ice object. // -class ObjectReader : public Ice::ObjectReader +class ObjectReader : public Ice::Object { public: @@ -533,7 +573,8 @@ public: virtual void ice_postUnmarshal(); - virtual void read(const Ice::InputStreamPtr&); + virtual void _iceWrite(Ice::OutputStream*) const; + virtual void _iceRead(Ice::InputStream*); virtual ClassInfoPtr getInfo() const; @@ -555,26 +596,32 @@ private: // // ExceptionReader creates a PHP user exception and unmarshals it. // -class ExceptionReader : public Ice::UserExceptionReader +class ExceptionReader : public Ice::UserException { public: ExceptionReader(const CommunicatorInfoPtr&, const ExceptionInfoPtr& TSRMLS_DC); ~ExceptionReader() throw(); - virtual void read(const Ice::InputStreamPtr&) const; - virtual bool usesClasses() const; - - virtual std::string ice_name() const; + virtual std::string ice_id() const; virtual ExceptionReader* ice_clone() const; virtual void ice_throw() const; + virtual void _write(Ice::OutputStream*) const; + virtual void _read(Ice::InputStream*); + virtual bool _usesClasses() const; + ExceptionInfoPtr getInfo() const; zval* getException() const; Ice::SlicedDataPtr getSlicedData() const; +protected: + + virtual void _writeImpl(Ice::OutputStream*) const {} + virtual void _readImpl(Ice::InputStream*) {} + private: CommunicatorInfoPtr _communicatorInfo; diff --git a/php/src/php5/Util.cpp b/php/src/php5/Util.cpp index 3840902b265..affb9428136 100644 --- a/php/src/php5/Util.cpp +++ b/php/src/php5/Util.cpp @@ -8,7 +8,7 @@ // ********************************************************************** #include <Util.h> -#include <IceUtil/UUID.h> +#include <Ice/UUID.h> #include <Slice/PHPUtil.h> #include <algorithm> #include <ctype.h> @@ -323,7 +323,7 @@ IcePHP::createStringMap(zval* zv, const map<string, string>& ctx TSRMLS_DC) for(map<string, string>::const_iterator p = ctx.begin(); p != ctx.end(); ++p) { if(add_assoc_stringl_ex(zv, const_cast<char*>(p->first.c_str()), p->first.length() + 1, - const_cast<char*>(p->second.c_str()), + const_cast<char*>(p->second.c_str()), static_cast<uint>(p->second.length()), 1) == FAILURE) { return false; @@ -595,7 +595,7 @@ convertLocalException(const Ice::LocalException& ex, zval* zex TSRMLS_DC) zend_update_property(cls, zex, const_cast<char*>("supported"), sizeof("supported") - 1, v TSRMLS_CC); zval_ptr_dtor(&v); } - catch(const Ice::NoObjectFactoryException& e) + catch(const Ice::NoValueFactoryException& e) { setStringMember(zex, "reason", e.reason TSRMLS_CC); setStringMember(zex, "type", e.type TSRMLS_CC); @@ -618,6 +618,10 @@ convertLocalException(const Ice::LocalException& ex, zval* zex TSRMLS_DC) { setStringMember(zex, "reason", e.reason TSRMLS_CC); } + catch(const Ice::ConnectionManuallyClosedException& e) + { + add_property_bool(zex, "graceful", e.graceful ? 1 : 0); + } catch(const Ice::LocalException&) { // @@ -645,7 +649,7 @@ IcePHP::convertException(const Ice::Exception& ex TSRMLS_DC) } catch(const Ice::LocalException& e) { - zend_class_entry* cls = idToClass(e.ice_name() TSRMLS_CC); + zend_class_entry* cls = idToClass(e.ice_id() TSRMLS_CC); if(cls) { if(object_init_ex(zex, cls) != SUCCESS) @@ -924,7 +928,7 @@ ZEND_FUNCTION(Ice_generateUUID) WRONG_PARAM_COUNT; } - string uuid = IceUtil::generateUUID(); + string uuid = Ice::generateUUID(); RETURN_STRINGL(STRCAST(uuid.c_str()), static_cast<int>(uuid.size()), 1); } |