From 21d6da9ae8b7f87bd35be4c55122545c2a6c0987 Mon Sep 17 00:00:00 2001 From: Marc Laukien Date: Wed, 5 Sep 2001 02:35:27 +0000 Subject: batch-mode --- cpp/src/Ice/.depend | 12 ++-- cpp/src/Ice/Collector.cpp | 92 ++++++++++++++++++---------- cpp/src/Ice/Emitter.cpp | 135 +++++++++++++++++++++++++++++++++++++---- cpp/src/Ice/Emitter.h | 5 ++ cpp/src/Ice/LocalException.cpp | 34 +++++++++++ cpp/src/Ice/ObjectAdapterI.cpp | 2 +- cpp/src/Ice/Outgoing.cpp | 46 ++++++++++++-- cpp/src/Ice/PicklerI.cpp | 9 +-- cpp/src/Ice/Protocol.h | 54 +++++++++++++++++ cpp/src/Ice/Proxy.cpp | 68 ++++++++++++++++++--- cpp/src/Ice/Reference.cpp | 73 ++++++++++++++++------ cpp/src/Ice/Reference.h | 22 ++++--- cpp/src/Ice/Stream.cpp | 43 +++++++++++-- cpp/src/Ice/ThreadPool.cpp | 13 ++-- cpp/src/Ice/TraceUtil.cpp | 85 +++++++++++++++++++++++++- cpp/src/Ice/TraceUtil.h | 10 ++- cpp/src/Ice/ice.dsp | 4 ++ cpp/src/Slice/Parser.cpp | 1 + 18 files changed, 590 insertions(+), 118 deletions(-) create mode 100644 cpp/src/Ice/Protocol.h (limited to 'cpp/src') diff --git a/cpp/src/Ice/.depend b/cpp/src/Ice/.depend index d8ea819cc7c..2ebb6e91cf6 100644 --- a/cpp/src/Ice/.depend +++ b/cpp/src/Ice/.depend @@ -2,19 +2,19 @@ Shared.o: Shared.cpp ../../include/Ice/Shared.h ../../include/Ice/Config.h Stream.o: Stream.cpp ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Object.h ../../include/Ice/Proxy.h ../../include/Ice/ReferenceF.h ../Ice/ProxyFactory.h ../../include/Ice/ValueFactory.h ../Ice/ValueFactoryManager.h ../../include/Ice/ValueFactoryF.h ../../include/Ice/LocalException.h LocalException.o: LocalException.cpp ../../include/Ice/LocalException.h ../../include/Ice/Config.h ../Ice/Network.h Pickler.o: Pickler.cpp ../../include/Ice/Pickler.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h -PicklerI.o: PicklerI.cpp ../Ice/PicklerI.h ../../include/Ice/Pickler.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/InstanceF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../../include/Ice/LocalException.h +PicklerI.o: PicklerI.cpp ../Ice/PicklerI.h ../../include/Ice/Pickler.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/InstanceF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../../include/Ice/LocalException.h ../Ice/Protocol.h Properties.o: Properties.cpp ../../include/Ice/Properties.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h PropertiesI.o: PropertiesI.cpp ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/LocalException.h Logger.o: Logger.cpp ../../include/Ice/Logger.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h LoggerI.o: LoggerI.cpp ../Ice/LoggerI.h ../../include/Ice/Logger.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h SysLoggerI.o: SysLoggerI.cpp ../Ice/SysLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h TraceLevels.o: TraceLevels.cpp ../Ice/TraceLevels.h ../Ice/TraceLevelsF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/PropertiesF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/Properties.h -TraceUtil.o: TraceUtil.cpp ../Ice/TraceUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../Ice/TraceLevels.h ../../include/Ice/Logger.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h +TraceUtil.o: TraceUtil.cpp ../Ice/TraceUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Object.h ../../include/Ice/Proxy.h ../../include/Ice/ReferenceF.h ../Ice/TraceLevels.h ../../include/Ice/Logger.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../Ice/Protocol.h Instance.o: Instance.cpp ../Ice/Instance.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../Ice/TraceLevels.h ../Ice/ProxyFactory.h ../../include/Ice/ReferenceF.h ../Ice/ThreadPool.h ../Ice/EventHandlerF.h ../Ice/Emitter.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/EndpointF.h ../Ice/EventHandler.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../Ice/ValueFactoryManager.h ../../include/Ice/ValueFactoryF.h ../Ice/ObjectAdapterFactory.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../Ice/PicklerI.h ../../include/Ice/Pickler.h ../Ice/SysLoggerI.h Communicator.o: Communicator.cpp ../../include/Ice/Communicator.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/LoggerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/PicklerF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ValueFactoryF.h ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h CommunicatorI.o: CommunicatorI.cpp ../Ice/CommunicatorI.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/Communicator.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/LoggerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/PicklerF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ValueFactoryF.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/ProxyFactory.h ../../include/Ice/ReferenceF.h ../Ice/ThreadPool.h ../Ice/EventHandlerF.h ../../include/Ice/ObjectAdapter.h ../Ice/ValueFactoryManager.h ../Ice/ObjectAdapterFactory.h ../../include/Ice/Logger.h ../../include/Ice/Initialize.h ../../include/Ice/LocalException.h ObjectAdapter.o: ObjectAdapter.cpp ../../include/Ice/ObjectAdapter.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h -ObjectAdapterI.o: ObjectAdapterI.cpp ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/CommunicatorF.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/CollectorF.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/PicklerF.h ../../include/Ice/Proxy.h ../../include/Ice/ReferenceF.h ../Ice/ProxyFactory.h ../Ice/Reference.h ../Ice/EndpointF.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Collector.h ../../include/Ice/ObjectAdapterF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../../include/Ice/Functional.h +ObjectAdapterI.o: ObjectAdapterI.cpp ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/CommunicatorF.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/CollectorF.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/PicklerF.h ../../include/Ice/Proxy.h ../../include/Ice/ReferenceF.h ../Ice/ProxyFactory.h ../Ice/Reference.h ../Ice/EndpointF.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Collector.h ../../include/Ice/ObjectAdapterF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../../include/Ice/Properties.h ../../include/Ice/Functional.h ObjectAdapterFactory.o: ObjectAdapterFactory.cpp ../Ice/ObjectAdapterFactory.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/CommunicatorF.h ../../include/Ice/CollectorF.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../Ice/Instance.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/PicklerF.h ValueFactory.o: ValueFactory.cpp ../../include/Ice/ValueFactory.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ValueFactoryManager.o: ValueFactoryManager.cpp ../Ice/ValueFactoryManager.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ValueFactoryF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/ValueFactory.h @@ -26,10 +26,10 @@ ProxyFactory.o: ProxyFactory.cpp ../Ice/ProxyFactory.h ../../include/Ice/ProxyFa Proxy.o: Proxy.cpp ../../include/Ice/Proxy.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/EmitterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Shared.h ../../include/Ice/Object.h ../../include/Ice/ObjectF.h ../Ice/ObjectAdapterFactory.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Outgoing.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../Ice/Reference.h ../Ice/EndpointF.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/ThreadPoolF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/PicklerF.h ../../include/Ice/Logger.h ../Ice/TraceLevels.h ../Ice/Emitter.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h Outgoing.o: Outgoing.cpp ../../include/Ice/Outgoing.h ../../include/Ice/EmitterF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ReferenceF.h ../../include/Ice/Stream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../../include/Ice/Object.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Shared.h ../Ice/Emitter.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/ThreadPoolF.h ../Ice/EndpointF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/Reference.h ../../include/Ice/LocalException.h Incoming.o: Incoming.cpp ../../include/Ice/Incoming.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../../include/Ice/InstanceF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EmitterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h -Emitter.o: Emitter.cpp ../Ice/Emitter.h ../../include/Ice/EmitterF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/ThreadPoolF.h ../Ice/EndpointF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Logger.h ../Ice/TraceLevels.h ../Ice/TraceUtil.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/ThreadPool.h ../Ice/Endpoint.h ../Ice/AcceptorF.h ../../include/Ice/Outgoing.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h -Collector.o: Collector.cpp ../Ice/Collector.h ../../include/Ice/CollectorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/ThreadPoolF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../Ice/EndpointF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Logger.h ../Ice/TraceUtil.h ../Ice/Transceiver.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../../include/Ice/ObjectAdapter.h ../Ice/Endpoint.h ../Ice/ConnectorF.h ../../include/Ice/Incoming.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h +Emitter.o: Emitter.cpp ../Ice/Emitter.h ../../include/Ice/EmitterF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/ThreadPoolF.h ../Ice/EndpointF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Logger.h ../Ice/TraceLevels.h ../Ice/TraceUtil.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/ThreadPool.h ../Ice/Endpoint.h ../Ice/AcceptorF.h ../../include/Ice/Outgoing.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../Ice/Protocol.h ../../include/Ice/Functional.h +Collector.o: Collector.cpp ../Ice/Collector.h ../../include/Ice/CollectorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/ThreadPoolF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/Shared.h ../Ice/EndpointF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h ../../include/Ice/Buffer.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Logger.h ../Ice/TraceUtil.h ../Ice/Transceiver.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../../include/Ice/ObjectAdapter.h ../Ice/Endpoint.h ../Ice/ConnectorF.h ../../include/Ice/Incoming.h ../../include/Ice/LocalException.h ../Ice/Protocol.h ../../include/Ice/Functional.h Network.o: Network.cpp ../Ice/Network.h ../../include/Ice/Config.h ../../include/Ice/LocalException.h -ThreadPool.o: ThreadPool.cpp ../Ice/ThreadPool.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/EventHandlerF.h ../../include/Ice/Shared.h ../Ice/EventHandler.h ../../include/Ice/Stream.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../Ice/Network.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ValueFactoryF.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/Functional.h +ThreadPool.o: ThreadPool.cpp ../Ice/ThreadPool.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/EventHandlerF.h ../../include/Ice/Shared.h ../Ice/EventHandler.h ../../include/Ice/Stream.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../Ice/Network.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ValueFactoryF.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/Functional.h ../Ice/Protocol.h EventHandler.o: EventHandler.cpp ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/ThreadPoolF.h ../../include/Ice/Shared.h ../../include/Ice/Stream.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Native.h ../../include/Ice/LocalObject.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EmitterF.h ../Ice/ValueFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/PicklerF.h Connector.o: Connector.cpp ../Ice/Connector.h ../Ice/ConnectorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../Ice/TransceiverF.h ../../include/Ice/Shared.h Acceptor.o: Acceptor.cpp ../Ice/Acceptor.h ../Ice/AcceptorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../Ice/TransceiverF.h ../../include/Ice/Shared.h diff --git a/cpp/src/Ice/Collector.cpp b/cpp/src/Ice/Collector.cpp index 482abaef791..bc40066723f 100644 --- a/cpp/src/Ice/Collector.cpp +++ b/cpp/src/Ice/Collector.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include using namespace std; @@ -83,6 +84,7 @@ IceInternal::Collector::message(Stream& stream) Incoming in(_instance, _adapter); Stream* os = in.os(); bool invoke = false; + bool batch = false; bool response = false; { @@ -101,17 +103,17 @@ IceInternal::Collector::message(Stream& stream) stream.i = stream.b.begin() + 2; Byte messageType; stream.read(messageType); - stream.i = stream.b.begin() + 7; + stream.i = stream.b.begin() + headerSize; // // Write partial message header // - os->write(Byte(0)); // Protocol version - os->write(Byte(0)); // Encoding version + os->write(protocolVersion); + os->write(encodingVersion); switch (messageType) { - case 0: // Request + case requestMsg: { if (_state == StateClosing) { @@ -126,20 +128,37 @@ IceInternal::Collector::message(Stream& stream) invoke = true; Int requestId; stream.read(requestId); - if (!_endpoint->oneway() && - requestId != 0) // 0 means oneway + if (!_endpoint->oneway() && requestId != 0) // 0 means oneway { response = true; ++_responseCount; - os->write(Byte(1)); // Message type (reply) + os->write(replyMsg); os->write(Int(0)); // Message size (placeholder) - os->write(requestId); // Request id + os->write(requestId); } } break; } - case 1: // Reply + case requestBatchMsg: + { + if (_state == StateClosing) + { + traceRequest("received batch request during closing\n" + "(ignored by server, client will retry)", + stream, _logger, _traceLevels); + } + else + { + traceRequest("received batch request", + stream, _logger, _traceLevels); + invoke = true; + batch = true; + } + break; + } + + case replyMsg: { traceReply("received reply on server side\n" "(invalid, closing connection)", @@ -148,7 +167,7 @@ IceInternal::Collector::message(Stream& stream) break; } - case 2: // CloseConnection + case closeConnectionMsg: { traceHeader("received close connection on server side\n" "(invalid, closing connection)", @@ -182,27 +201,34 @@ IceInternal::Collector::message(Stream& stream) if (invoke) { - try - { - in.invoke(stream); - } - catch(const LocalException& ex) + do { - JTCSyncT sync(*this); - warning(ex); - setState(StateClosed); - return; - } - catch(...) - { - JTCSyncT sync(*this); - string s("server exception:\n"); - s += "unknown exception (no further information available)\n"; - s += _transceiver->toString(); - _logger->warning(s); - setState(StateClosed); - return; + try + { + in.invoke(stream); + + if (batch) // If we're in batch mode, we need the input stream back + { + stream.swap(*in.is()); + } + } + catch(const LocalException& ex) + { + JTCSyncT sync(*this); + warning(ex); + setState(StateClosed); + } + catch(...) + { + JTCSyncT sync(*this); + string s("server exception:\n"); + s += "unknown exception (no further information available)\n"; + s += _transceiver->toString(); + _logger->warning(s); + setState(StateClosed); + } } + while (batch && stream.i < stream.b.end()); } if (response) @@ -405,10 +431,10 @@ void IceInternal::Collector::closeConnection() { Stream os(_instance); - os.write(Byte(0)); // Protocol version - os.write(Byte(0)); // Encoding version - os.write(Byte(2)); // Message type = CloseConnection - os.write(Int(7)); // Message size + os.write(protocolVersion); + os.write(encodingVersion); + os.write(closeConnectionMsg); + os.write(headerSize); // Message size os.i = os.b.begin(); traceHeader("sending close connection", os, _logger, _traceLevels); _transceiver->write(os, _endpoint->timeout()); diff --git a/cpp/src/Ice/Emitter.cpp b/cpp/src/Ice/Emitter.cpp index 4b69bf41a9d..5a5c4537893 100644 --- a/cpp/src/Ice/Emitter.cpp +++ b/cpp/src/Ice/Emitter.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -49,9 +50,9 @@ void IceInternal::Emitter::prepareRequest(Outgoing* out) { Stream* os = out->os(); - os->write(Byte(0)); // Protocol version - os->write(Byte(0)); // Encoding version - os->write(Byte(0)); // Message type = Request + os->write(protocolVersion); + os->write(encodingVersion); + os->write(requestMsg); os->write(Int(0)); // Message size (placeholder) os->write(Int(0)); // Request ID (placeholder) } @@ -65,9 +66,8 @@ IceInternal::Emitter::sendRequest(Outgoing* out, bool oneway) { _exception->raise(); } - assert(_state == StateActive); - + Int requestId; try @@ -85,12 +85,13 @@ IceInternal::Emitter::sendRequest(Outgoing* out, bool oneway) if (!_endpoint->oneway() && !oneway) { requestId = _nextRequestId++; - if (requestId == 0) // 0 means oneway + if (requestId <= 0) { + _nextRequestId = 1; requestId = _nextRequestId++; } p = reinterpret_cast(&requestId); - copy(p, p + sizeof(Int), os->i + 7); + copy(p, p + sizeof(Int), os->i + headerSize); } traceRequest("sending request", *os, _logger, _traceLevels); _transceiver->write(*os, _endpoint->timeout()); @@ -100,10 +101,10 @@ IceInternal::Emitter::sendRequest(Outgoing* out, bool oneway) setState(StateClosed, ex); ex.raise(); } - + // // Only add to the request map if there was no exception, and if - // the operation is twoway. + // the operation is not oneway. // if (!_endpoint->oneway() && !oneway) { @@ -111,6 +112,104 @@ IceInternal::Emitter::sendRequest(Outgoing* out, bool oneway) } } +void +IceInternal::Emitter::prepareBatchRequest(Outgoing* out) +{ + lock(); + + if (_exception.get()) + { + unlock(); + _exception->raise(); + } + assert(_state == StateActive); + + // + // The Emitter now belongs to `out', until finishBatchRequest() is + // called. + // + + if (_batchStream.b.empty()) + { + _batchStream.write(protocolVersion); + _batchStream.write(encodingVersion); + _batchStream.write(requestBatchMsg); + _batchStream.write(Int(0)); // Message size (placeholder) + } + + // + // Give the batch stream to `out', until finishBatchRequest() is + // called. + // + _batchStream.swap(*out->os()); +} + +void +IceInternal::Emitter::finishBatchRequest(Outgoing* out) +{ + if (_exception.get()) + { + unlock(); + _exception->raise(); + } + assert(_state == StateActive); + + _batchStream.swap(*out->os()); // Get the batch stream back + unlock(); // Give the Emitter back +} + +void +IceInternal::Emitter::abortBatchRequest() +{ + setState(StateClosed, AbortBatchRequestException(__FILE__, __LINE__)); + unlock(); // Give the Emitter back +} + +void +IceInternal::Emitter::flushBatchRequest() +{ + JTCSyncT sync(*this); + + if (_exception.get()) + { + _exception->raise(); + } + assert(_state == StateActive); + + try + { + if(_batchStream.b.empty()) + { + return; // Nothing to send + } + + _batchStream.i = _batchStream.b.begin(); + + // + // Fill in the message size + // + const Byte* p; + Int sz = _batchStream.b.size(); + p = reinterpret_cast(&sz); + copy(p, p + sizeof(Int), _batchStream.i + 3); + traceBatchRequest("sending batch request", _batchStream, _logger, _traceLevels); + _transceiver->write(_batchStream, _endpoint->timeout()); + + // + // Reset _batchStream and _batchRequestId, so that new batch + // messages can be sent. + // + Stream dummy(_instance); + _batchStream.swap(dummy); + assert(_batchStream.b.empty()); + } + catch(const LocalException& ex) + { + setState(StateClosed, ex); + ex.raise(); + } +} + int IceInternal::Emitter::timeout() const { @@ -153,11 +252,11 @@ IceInternal::Emitter::message(Stream& stream) stream.i = stream.b.begin() + 2; Byte messageType; stream.read(messageType); - stream.i = stream.b.begin() + 7; + stream.i = stream.b.begin() + headerSize; switch (messageType) { - case 0: // Request + case requestMsg: { traceRequest("received request on the client side\n" "(invalid, closing connection)", @@ -166,7 +265,16 @@ IceInternal::Emitter::message(Stream& stream) break; } - case 1: // Reply + case requestBatchMsg: + { + traceRequest("received request batch on the client side\n" + "(invalid, closing connection)", + stream, _logger, _traceLevels); + throw InvalidMessageException(__FILE__, __LINE__); + break; + } + + case replyMsg: { traceReply("received reply", stream, _logger, _traceLevels); Int requestId; @@ -181,7 +289,7 @@ IceInternal::Emitter::message(Stream& stream) break; } - case 2: // CloseConnection + case closeConnectionMsg: { traceHeader("received close connection", stream, _logger, _traceLevels); @@ -227,6 +335,7 @@ IceInternal::Emitter::Emitter(const InstancePtr& instance, _transceiver(transceiver), _endpoint(endpoint), _nextRequestId(1), + _batchStream(instance), _state(StateActive) { #ifndef ICE_NO_TRACE diff --git a/cpp/src/Ice/Emitter.h b/cpp/src/Ice/Emitter.h index 20b4eb6a357..f9e261b35fc 100644 --- a/cpp/src/Ice/Emitter.h +++ b/cpp/src/Ice/Emitter.h @@ -42,6 +42,10 @@ public: bool destroyed() const; void prepareRequest(Outgoing*); void sendRequest(Outgoing*, bool); + void prepareBatchRequest(Outgoing*); + void finishBatchRequest(Outgoing*); + void abortBatchRequest(); + void flushBatchRequest(); int timeout() const; // @@ -76,6 +80,7 @@ private: ::Ice::Int _nextRequestId; std::map< ::Ice::Int, Outgoing*> _requests; std::auto_ptr< ::Ice::LocalException> _exception; + Stream _batchStream; State _state; #ifndef ICE_NO_TRACE TraceLevelsPtr _traceLevels; diff --git a/cpp/src/Ice/LocalException.cpp b/cpp/src/Ice/LocalException.cpp index b8e2b1a62c8..a3a5eed671b 100644 --- a/cpp/src/Ice/LocalException.cpp +++ b/cpp/src/Ice/LocalException.cpp @@ -1224,3 +1224,37 @@ Ice::CloseConnectionException::raise() const throw *this; } +Ice::AbortBatchRequestException::AbortBatchRequestException(const char* file, int line) : + ProtocolException(file, line) +{ +} + +Ice::AbortBatchRequestException::AbortBatchRequestException(const AbortBatchRequestException& ex) : + ProtocolException(ex) +{ +} + +AbortBatchRequestException& +Ice::AbortBatchRequestException::operator=(const AbortBatchRequestException& ex) +{ + ProtocolException::operator=(ex); + return *this; +} + +string +Ice::AbortBatchRequestException::toString() const +{ + return debugInfo() + "protocol error: batch request was aborted"; +} + +LocalException* +Ice::AbortBatchRequestException::clone() const +{ + return new AbortBatchRequestException(*this); +} + +void +Ice::AbortBatchRequestException::raise() const +{ + throw *this; +} diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index 8dfc02da728..468293b242c 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -242,7 +242,7 @@ Ice::ObjectAdapterI::identityToProxy(const string& ident) transform(_collectorFactories.begin(), _collectorFactories.end(), back_inserter(endpoints), constMemFun(&CollectorFactory::endpoint)); - ReferencePtr reference = new Reference(_instance, ident, endpoints, endpoints); + ReferencePtr reference = new Reference(_instance, ident, Reference::ModeTwoway, false, endpoints, endpoints); return _instance->proxyFactory()->referenceToProxy(reference); } diff --git a/cpp/src/Ice/Outgoing.cpp b/cpp/src/Ice/Outgoing.cpp index 4e99b11507e..f13517782cd 100644 --- a/cpp/src/Ice/Outgoing.cpp +++ b/cpp/src/Ice/Outgoing.cpp @@ -42,19 +42,41 @@ IceInternal::NonRepeatable::get() const return _ex.get(); } -IceInternal::Outgoing::Outgoing(const EmitterPtr& emitter, const ReferencePtr& reference) : +IceInternal::Outgoing::Outgoing(const EmitterPtr& emitter, const ReferencePtr& ref) : _emitter(emitter), - _reference(reference), - _state(StateInProgress), - _is(reference->instance), - _os(reference->instance) + _reference(ref), + _state(StateUnsent), + _is(ref->instance), + _os(ref->instance) { - _emitter->prepareRequest(this); + switch (_reference->mode) + { + case Reference::ModeTwoway: + case Reference::ModeOneway: + case Reference::ModeDatagram: + { + _emitter->prepareRequest(this); + break; + } + + case Reference::ModeBatchOneway: + case Reference::ModeBatchDatagram: + { + _emitter->prepareBatchRequest(this); + break; + } + } + _os.write(_reference->identity); } IceInternal::Outgoing::~Outgoing() { + if (_state == StateUnsent && + (_reference->mode == Reference::ModeBatchOneway || _reference->mode == Reference::ModeBatchDatagram)) + { + _emitter->abortBatchRequest(); + } } bool @@ -70,6 +92,7 @@ IceInternal::Outgoing::invoke() JTCSyncT > sync(*this); _emitter->sendRequest(this, false); + _state = StateInProgress; Int timeout = _emitter->timeout(); while (_state == StateInProgress) @@ -149,6 +172,15 @@ IceInternal::Outgoing::invoke() case Reference::ModeDatagram: { _emitter->sendRequest(this, true); + _state = StateInProgress; + break; + } + + case Reference::ModeBatchOneway: + case Reference::ModeBatchDatagram: + { + _state = StateInProgress; // Must be set to StateInProgress before finishBatchRequest() + _emitter->finishBatchRequest(this); break; } } @@ -160,6 +192,7 @@ void IceInternal::Outgoing::finished(Stream& is) { JTCSyncT > sync(*this); + assert(_state != StateUnsent); if (_state == StateInProgress) { _is.swap(is); @@ -214,6 +247,7 @@ void IceInternal::Outgoing::finished(const LocalException& ex) { JTCSyncT > sync(*this); + assert(_state != StateUnsent); if (_state == StateInProgress) { _state = StateLocalException; diff --git a/cpp/src/Ice/PicklerI.cpp b/cpp/src/Ice/PicklerI.cpp index 43b99aafee7..fc2317e60c0 100644 --- a/cpp/src/Ice/PicklerI.cpp +++ b/cpp/src/Ice/PicklerI.cpp @@ -11,6 +11,7 @@ #include #include #include +#include using namespace std; using namespace Ice; @@ -34,8 +35,8 @@ ObjectPtr Ice::PicklerI::unpickle(std::istream& in) { Stream s(_instance); - s.b.resize(5); - in.read(s.b.begin(), 5); + s.b.resize(encapsHeaderSize); + in.read(s.b.begin(), encapsHeaderSize); if (in.eof()) { throw UnmarshalOutOfBoundsException(__FILE__, __LINE__); @@ -53,8 +54,8 @@ Ice::PicklerI::unpickle(std::istream& in) // Don't use s.b.resize() here, otherwise no size sanity checks // will be done - s.resize(5 + sz); - in.read(s.b.begin() + 5, sz); + s.resize(encapsHeaderSize + sz); + in.read(s.b.begin() + encapsHeaderSize, sz); if (in.eof()) { throw UnmarshalOutOfBoundsException(__FILE__, __LINE__); diff --git a/cpp/src/Ice/Protocol.h b/cpp/src/Ice/Protocol.h new file mode 100644 index 00000000000..a0f5216a207 --- /dev/null +++ b/cpp/src/Ice/Protocol.h @@ -0,0 +1,54 @@ +// ********************************************************************** +// +// Copyright (c) 2002 +// MutableRealms, Inc. +// Huntsville, AL, USA +// +// All Rights Reserved +// +// ********************************************************************** + +#ifndef ICE_PROTOCOL_H +#define ICE_PROTOCOL_H + +#include + +namespace IceInternal +{ + +// +// Size of the Ice protocol header +// +// Protocol version (Byte) +// Encoding version (Byte) +// Message type (Byte) +// Message size (Int) +// +const ::Ice::Int headerSize = 7; + +// +// Size of the Ice encapsulation header +// +// Encoding version (Byte) +// Encapsulation length (Int) +// +const ::Ice::Int encapsHeaderSize = 5; + + +// +// The current Ice protocol and encoding version +// +const ::Ice::Byte protocolVersion = 0; +const ::Ice::Byte encodingVersion = 0; + +// +// The Ice protocol message types +// +const ::Ice::Byte requestMsg = 0; +const ::Ice::Byte requestBatchMsg = 1; +const ::Ice::Byte replyMsg = 2; +const ::Ice::Byte closeConnectionMsg = 3; + +} + +#endif diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index 3b3ae6acaa5..f80f0a17eed 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -133,6 +133,13 @@ IceProxy::Ice::Object::_ping() } } +void +IceProxy::Ice::Object::_flush() +{ + Handle< ::IceDelegate::Ice::Object> __del = __getDelegate(); + __del->_flush(); +} + bool IceProxy::Ice::Object::operator==(const Object& r) const { @@ -205,9 +212,9 @@ IceProxy::Ice::Object::_oneway() const } ObjectPrx -IceProxy::Ice::Object::_secure() const +IceProxy::Ice::Object::_batchOneway() const { - ReferencePtr ref = _reference->changeMode(Reference::ModeSecure); + ReferencePtr ref = _reference->changeMode(Reference::ModeBatchOneway); if (ref == _reference) { return ObjectPrx(const_cast< ::IceProxy::Ice::Object*>(this)); @@ -236,6 +243,38 @@ IceProxy::Ice::Object::_datagram() const } } +ObjectPrx +IceProxy::Ice::Object::_batchDatagram() const +{ + ReferencePtr ref = _reference->changeMode(Reference::ModeBatchDatagram); + if (ref == _reference) + { + return ObjectPrx(const_cast< ::IceProxy::Ice::Object*>(this)); + } + else + { + ObjectPrx proxy(new ::IceProxy::Ice::Object()); + proxy->setup(ref); + return proxy; + } +} + +ObjectPrx +IceProxy::Ice::Object::_secure(bool b) const +{ + ReferencePtr ref = _reference->changeSecure(b); + if (ref == _reference) + { + return ObjectPrx(const_cast< ::IceProxy::Ice::Object*>(this)); + } + else + { + ObjectPrx proxy(new ::IceProxy::Ice::Object()); + proxy->setup(ref); + return proxy; + } +} + ObjectPrx IceProxy::Ice::Object::_timeout(int t) const { @@ -409,6 +448,12 @@ IceProxy::Ice::Object::setup(const ReferencePtr& reference) _reference = reference; } +void +IceDelegate::Ice::Object::_flush() +{ + // Do nothing +} + IceDelegate::Ice::Object::Object() { } @@ -451,6 +496,12 @@ IceDelegateM::Ice::Object::_ping() } } +void +IceDelegateM::Ice::Object::_flush() +{ + __emitter()->flushBatchRequest(); +} + IceDelegateM::Ice::Object::Object() { } @@ -484,6 +535,7 @@ IceDelegateM::Ice::Object::setup(const ReferencePtr& reference) { case Reference::ModeTwoway: case Reference::ModeOneway: + case Reference::ModeBatchOneway: { remove_copy_if(_reference->endpoints.begin(), _reference->endpoints.end(), back_inserter(endpoints), not1(constMemFun(&Endpoint::regular))); @@ -491,18 +543,18 @@ IceDelegateM::Ice::Object::setup(const ReferencePtr& reference) } case Reference::ModeDatagram: + case Reference::ModeBatchDatagram: { remove_copy_if(_reference->endpoints.begin(), _reference->endpoints.end(), back_inserter(endpoints), not1(constMemFun(&Endpoint::datagram))); break; } + } - case Reference::ModeSecure: - { - remove_copy_if(_reference->endpoints.begin(), _reference->endpoints.end(), back_inserter(endpoints), - not1(constMemFun(&Endpoint::secure))); - break; - } + if (_reference->secure) + { + endpoints.erase(remove_if(endpoints.begin(), endpoints.end(), not1(constMemFun(&Endpoint::secure))), + endpoints.end()); } if (endpoints.empty()) diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp index ca779b73ef3..c7885f1e94e 100644 --- a/cpp/src/Ice/Reference.cpp +++ b/cpp/src/Ice/Reference.cpp @@ -21,11 +21,12 @@ using namespace IceInternal; void IceInternal::incRef(Reference* p) { p->__incRef(); } void IceInternal::decRef(Reference* p) { p->__decRef(); } -IceInternal::Reference::Reference(const InstancePtr& inst, const string& ident, +IceInternal::Reference::Reference(const InstancePtr& inst, const string& ident, Mode md, bool sec, const vector& origEndpts, const vector& endpts) : instance(inst), identity(ident), - mode(ModeTwoway), + mode(md), + secure(sec), origEndpoints(origEndpts), endpoints(endpts) { @@ -33,7 +34,8 @@ IceInternal::Reference::Reference(const InstancePtr& inst, const string& ident, IceInternal::Reference::Reference(const InstancePtr& inst, const string& str) : instance(inst), - mode(ModeTwoway) + mode(ModeTwoway), + secure(false) { const string delim = " \t\n\r"; @@ -101,9 +103,9 @@ IceInternal::Reference::Reference(const InstancePtr& inst, const string& str) : break; } - case 's': + case 'O': { - const_cast(mode) = ModeSecure; + const_cast(mode) = ModeBatchOneway; break; } @@ -113,6 +115,18 @@ IceInternal::Reference::Reference(const InstancePtr& inst, const string& str) : break; } + case 'D': + { + const_cast(mode) = ModeBatchDatagram; + break; + } + + case 's': + { + const_cast(secure) = true; + break; + } + default: { throw ReferenceParseException(__FILE__, __LINE__); @@ -168,7 +182,8 @@ IceInternal::Reference::Reference(const InstancePtr& inst, const string& str) : IceInternal::Reference::Reference(Stream* s) : instance(s->instance()), - mode(ModeTwoway) + mode(ModeTwoway), + secure(false) { s->read(const_cast(identity)); @@ -260,7 +275,7 @@ IceInternal::Reference::changeIdentity(const string& newIdentity) const } else { - return new Reference(instance, newIdentity, origEndpoints, endpoints); + return new Reference(instance, newIdentity, mode, secure, origEndpoints, endpoints); } } @@ -281,7 +296,7 @@ IceInternal::Reference::changeTimeout(int timeout) const newEndpoints.push_back((*p)->timeout(timeout)); } - ReferencePtr ref(new Reference(instance, identity, newOrigEndpoints, newEndpoints)); + ReferencePtr ref(new Reference(instance, identity, mode, secure, newOrigEndpoints, newEndpoints)); if (*ref.get() == *this) { @@ -292,31 +307,41 @@ IceInternal::Reference::changeTimeout(int timeout) const } ReferencePtr -IceInternal::Reference::changeMode(Mode m) const +IceInternal::Reference::changeMode(Mode newMode) const +{ + if (newMode == mode) + { + return ReferencePtr(const_cast(this)); + } + else + { + return new Reference(instance, identity, newMode, secure, origEndpoints, endpoints); + } +} + +ReferencePtr +IceInternal::Reference::changeSecure(bool newSecure) const { - if (m == mode) + if (newSecure == secure) { return ReferencePtr(const_cast(this)); } else { - ReferencePtr ref(new Reference(instance, identity, origEndpoints, endpoints)); - const_cast(ref->mode) = m; - return ref; + return new Reference(instance, identity, mode, newSecure, origEndpoints, endpoints); } } ReferencePtr -IceInternal::Reference::changeEndpoints(const std::vector& endpts) const +IceInternal::Reference::changeEndpoints(const std::vector& newEndpoints) const { - if (endpts == endpoints) + if (newEndpoints == endpoints) { return ReferencePtr(const_cast(this)); } else { - ReferencePtr ref(new Reference(instance, identity, origEndpoints, endpts)); - return ref; + return new Reference(instance, identity, mode, secure, origEndpoints, newEndpoints); } } @@ -344,6 +369,11 @@ IceInternal::Reference::operator!=(const Reference& r) const return true; } + if (secure != r.secure) + { + return true; + } + if (origEndpoints != r.origEndpoints) { return true; @@ -383,6 +413,15 @@ IceInternal::Reference::operator<(const Reference& r) const return false; } + if (!secure && r.secure) + { + return true; + } + else if (secure != r.secure) + { + return false; + } + if (origEndpoints < r.origEndpoints) { return true; diff --git a/cpp/src/Ice/Reference.h b/cpp/src/Ice/Reference.h index 3fc659beaff..865477a822f 100644 --- a/cpp/src/Ice/Reference.h +++ b/cpp/src/Ice/Reference.h @@ -25,7 +25,16 @@ class Reference : public Shared { public: - Reference(const InstancePtr&, const std::string&, + enum Mode + { + ModeTwoway, + ModeOneway, + ModeBatchOneway, + ModeDatagram, + ModeBatchDatagram + }; + + Reference(const InstancePtr&, const std::string&, Mode, bool, const std::vector&, const std::vector&); Reference(const InstancePtr&, const std::string&); Reference(Stream*); @@ -45,16 +54,8 @@ public: // const InstancePtr instance; const std::string identity; - - enum Mode - { - ModeTwoway, - ModeOneway, - ModeSecure, - ModeDatagram - }; const Mode mode; - + const bool secure; const std::vector origEndpoints; // Original endpoints const std::vector endpoints; // Actual endpoints (set by a location forward) @@ -65,6 +66,7 @@ public: ReferencePtr changeIdentity(const std::string&) const; ReferencePtr changeTimeout(int) const; ReferencePtr changeMode(Mode) const; + ReferencePtr changeSecure(bool) const; ReferencePtr changeEndpoints(const std::vector&) const; bool operator==(const Reference&) const; diff --git a/cpp/src/Ice/Stream.cpp b/cpp/src/Ice/Stream.cpp index 21917a45783..7fa0802c9e6 100644 --- a/cpp/src/Ice/Stream.cpp +++ b/cpp/src/Ice/Stream.cpp @@ -39,8 +39,12 @@ IceInternal::Stream::instance() const void IceInternal::Stream::swap(Stream& other) { + assert(_instance.get() == other._instance.get()); + b.swap(other.b); std::swap(i, other.i); + _encapsStartStack.swap(other._encapsStartStack); + _stringSet.swap(other._stringSet); } void @@ -68,14 +72,14 @@ IceInternal::Stream::startWriteEncaps() { write(Byte(0)); // Encoding version write(Int(0)); // Placeholder for the encapsulation length - _encapsStartStack.push(b.size()); + _encapsStartStack.push_back(b.size()); } void IceInternal::Stream::endWriteEncaps() { - int start = _encapsStartStack.top(); - _encapsStartStack.pop(); + int start = _encapsStartStack.back(); + _encapsStartStack.pop_back(); Int sz = b.size() - start; const Byte* p = reinterpret_cast(&sz); #ifdef ICE_BIGENDIAN @@ -100,14 +104,14 @@ IceInternal::Stream::startReadEncaps() } Int sz; read(sz); - _encapsStartStack.push(i - b.begin()); + _encapsStartStack.push_back(i - b.begin()); } void IceInternal::Stream::endReadEncaps() { - int start = _encapsStartStack.top(); - _encapsStartStack.pop(); + int start = _encapsStartStack.back(); + _encapsStartStack.pop_back(); Container::iterator save = i; i = b.begin() + start - sizeof(Int); Int sz; @@ -842,9 +846,22 @@ IceInternal::Stream::CmpPosPos::CmpPosPos(const Container& cont) : { } +IceInternal::Stream::CmpPosPos::CmpPosPos(const CmpPosPos& cmp) : + _cont(cmp._cont) +{ +} + +IceInternal::Stream::CmpPosPos& +IceInternal::Stream::CmpPosPos::operator=(const CmpPosPos&) +{ + // Do *not* assign anything! I want CmpPosPos to ignore std::swap(). + return *this; +} + bool IceInternal::Stream::CmpPosPos::operator()(int p, int q) const { + assert(!_cont.empty()); return strcmp(_cont.begin() + p, _cont.begin() + q) < 0; } @@ -853,14 +870,28 @@ IceInternal::Stream::CmpPosString::CmpPosString(const Container& cont) : { } +IceInternal::Stream::CmpPosString::CmpPosString(const CmpPosString& cmp) : + _cont(cmp._cont) +{ +} + +IceInternal::Stream::CmpPosString& +IceInternal::Stream::CmpPosString::operator=(const CmpPosString&) +{ + // Do *not* assign anything! I want CmpPosString to ignore std::swap(). + return *this; +} + bool IceInternal::Stream::CmpPosString::operator()(int i, const string& s) const { + assert(!_cont.empty()); return _cont.begin() + i < s; } bool IceInternal::Stream::CmpPosString::operator()(const string& s, int i) const { + assert(!_cont.empty()); return s < _cont.begin() + i; } diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp index fbe7b4a2e34..53bb5d0d956 100644 --- a/cpp/src/Ice/ThreadPool.cpp +++ b/cpp/src/Ice/ThreadPool.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include using namespace std; @@ -370,11 +371,11 @@ IceInternal::ThreadPool::read(const EventHandlerPtr& handler) { Stream& stream = handler->_stream; - if (stream.b.size() < 7) // Read header? + if (stream.b.size() < static_cast(headerSize)) // Read header? { if (stream.b.size() == 0) { - stream.b.resize(7); + stream.b.resize(headerSize); stream.i = stream.b.begin(); } @@ -385,19 +386,19 @@ IceInternal::ThreadPool::read(const EventHandlerPtr& handler) } } - if (stream.b.size() >= 7) // Interpret header? + if (stream.b.size() >= static_cast(headerSize)) // Interpret header? { int pos = stream.i - stream.b.begin(); stream.i = stream.b.begin(); Byte protVer; stream.read(protVer); - if (protVer != 0) + if (protVer != protocolVersion) { throw UnsupportedProtocolException(__FILE__, __LINE__); } Byte encVer; stream.read(encVer); - if (encVer != 0) + if (encVer != encodingVersion) { throw UnsupportedEncodingException(__FILE__, __LINE__); } @@ -413,7 +414,7 @@ IceInternal::ThreadPool::read(const EventHandlerPtr& handler) stream.i = stream.b.begin() + pos; } - if (stream.b.size() > 7 && stream.i != stream.b.end()) + if (stream.b.size() > static_cast(headerSize) && stream.i != stream.b.end()) { handler->read(stream); } diff --git a/cpp/src/Ice/TraceUtil.cpp b/cpp/src/Ice/TraceUtil.cpp index 6a906e6882d..22f35ff1b90 100644 --- a/cpp/src/Ice/TraceUtil.cpp +++ b/cpp/src/Ice/TraceUtil.cpp @@ -10,9 +10,11 @@ #include #include +#include #include #include #include +#include #include using namespace std; @@ -30,7 +32,35 @@ printHeader(ostream& s, Stream& stream) s << "\nencoding version = " << static_cast(encVer); Byte type; stream.read(type); - s << "\nmessage type = " << static_cast(type); + s << "\nmessage type = " << static_cast(type) << ' '; + switch(type) + { + case requestMsg: + { + s << "(request)"; + break; + } + case requestBatchMsg: + { + s << "(request batch)"; + break; + } + case replyMsg: + { + s << "(reply)"; + break; + } + case closeConnectionMsg: + { + s << "(close connection)"; + break; + } + default: + { + s << "(unknown)"; + break; + } + } Int size; stream.read(size); s << "\nmessage size = " << size; @@ -69,7 +99,9 @@ IceInternal::traceRequest(const char* heading, const Stream& str, const ::Ice::L stream.read(requestId); s << "\nrequest id = " << requestId; if (requestId == 0) + { s << " (oneway)"; + } string identity; stream.read(identity); s << "\nidentity = " << identity; @@ -81,6 +113,22 @@ IceInternal::traceRequest(const char* heading, const Stream& str, const ::Ice::L } } +void +IceInternal::traceBatchRequest(const char* heading, const Stream& str, const ::Ice::LoggerPtr& logger, + const TraceLevelsPtr& tl) +{ + if (tl->protocol >= 1) + { + Stream& stream = const_cast(str); + Stream::Container::iterator p = stream.i; + stream.i = stream.b.begin(); + ostringstream s; + s << heading; + printHeader(s, stream); + stream.i = p; + } +} + void IceInternal::traceReply(const char* heading, const Stream& str, const ::Ice::LoggerPtr& logger, const TraceLevelsPtr& tl) @@ -98,7 +146,40 @@ IceInternal::traceReply(const char* heading, const Stream& str, const ::Ice::Log s << "\nrequest id = " << requestId; Byte status; stream.read(status); - s << "\nreply status = " << static_cast(status); + s << "\nreply status = " << static_cast(status) << ' '; + switch(static_cast(status)) + { + case DispatchOK: + { + s << "(ok)"; + break; + } + case DispatchException: + { + s << "(exception)"; + break; + } + case DispatchLocationForward: + { + s << "(location forward)"; + break; + } + case DispatchObjectNotExist: + { + s << "(object not exist)"; + break; + } + case DispatchOperationNotExist: + { + s << "(operation not exist)"; + break; + } + default: + { + s << "(unknown)"; + break; + } + } logger->trace(tl->protocolCat, s.str()); stream.i = p; } diff --git a/cpp/src/Ice/TraceUtil.h b/cpp/src/Ice/TraceUtil.h index 7588d0ca71a..c77f082ff43 100644 --- a/cpp/src/Ice/TraceUtil.h +++ b/cpp/src/Ice/TraceUtil.h @@ -19,12 +19,10 @@ namespace IceInternal class Stream; -void traceHeader(const char*, const Stream&, - const ::Ice::LoggerPtr&, const TraceLevelsPtr&); -void traceRequest(const char*, const Stream&, - const ::Ice::LoggerPtr&, const TraceLevelsPtr&); -void traceReply(const char*, const Stream&, - const ::Ice::LoggerPtr&, const TraceLevelsPtr&); +void traceHeader(const char*, const Stream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); +void traceRequest(const char*, const Stream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); +void traceBatchRequest(const char*, const Stream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); +void traceReply(const char*, const Stream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&); } diff --git a/cpp/src/Ice/ice.dsp b/cpp/src/Ice/ice.dsp index a8401ebbdce..5fa32da7baa 100644 --- a/cpp/src/Ice/ice.dsp +++ b/cpp/src/Ice/ice.dsp @@ -458,6 +458,10 @@ SOURCE=.\Ice\PropertiesI.h # End Source File # Begin Source File +SOURCE=.\Protocol.h +# End Source File +# Begin Source File + SOURCE=..\..\include\Ice\Proxy.h # End Source File # Begin Source File diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp index 58da790bea5..16c8fcfe97b 100644 --- a/cpp/src/Slice/Parser.cpp +++ b/cpp/src/Slice/Parser.cpp @@ -1796,6 +1796,7 @@ void Slice::Unit::destroy() { _builtins.clear(); + _contentMap.clear(); Container::destroy(); } -- cgit v1.2.3