summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/.depend12
-rw-r--r--cpp/src/Ice/Collector.cpp92
-rw-r--r--cpp/src/Ice/Emitter.cpp135
-rw-r--r--cpp/src/Ice/Emitter.h5
-rw-r--r--cpp/src/Ice/LocalException.cpp34
-rw-r--r--cpp/src/Ice/ObjectAdapterI.cpp2
-rw-r--r--cpp/src/Ice/Outgoing.cpp46
-rw-r--r--cpp/src/Ice/PicklerI.cpp9
-rw-r--r--cpp/src/Ice/Protocol.h54
-rw-r--r--cpp/src/Ice/Proxy.cpp68
-rw-r--r--cpp/src/Ice/Reference.cpp73
-rw-r--r--cpp/src/Ice/Reference.h22
-rw-r--r--cpp/src/Ice/Stream.cpp43
-rw-r--r--cpp/src/Ice/ThreadPool.cpp13
-rw-r--r--cpp/src/Ice/TraceUtil.cpp85
-rw-r--r--cpp/src/Ice/TraceUtil.h10
-rw-r--r--cpp/src/Ice/ice.dsp4
-rw-r--r--cpp/src/Slice/Parser.cpp1
18 files changed, 590 insertions, 118 deletions
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 <Ice/Endpoint.h>
#include <Ice/Incoming.h>
#include <Ice/LocalException.h>
+#include <Ice/Protocol.h>
#include <Ice/Functional.h>
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<JTCRecursiveMutex> sync(*this);
- warning(ex);
- setState(StateClosed);
- return;
- }
- catch(...)
- {
- JTCSyncT<JTCRecursiveMutex> 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<JTCRecursiveMutex> sync(*this);
+ warning(ex);
+ setState(StateClosed);
+ }
+ catch(...)
+ {
+ JTCSyncT<JTCRecursiveMutex> 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 <Ice/Endpoint.h>
#include <Ice/Outgoing.h>
#include <Ice/LocalException.h>
+#include <Ice/Protocol.h>
#include <Ice/Functional.h>
#include <sstream>
@@ -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<Byte*>(&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<JTCMutex> 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<Byte*>(&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<JTCMonitorT<JTCMutex> > 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<JTCMonitorT<JTCMutex> > sync(*this);
+ assert(_state != StateUnsent);
if (_state == StateInProgress)
{
_is.swap(is);
@@ -214,6 +247,7 @@ void
IceInternal::Outgoing::finished(const LocalException& ex)
{
JTCSyncT<JTCMonitorT<JTCMutex> > 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 <Ice/PicklerI.h>
#include <Ice/Stream.h>
#include <Ice/LocalException.h>
+#include <Ice/Protocol.h>
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 <Ice/Config.h>
+
+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));
@@ -237,6 +244,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
{
ReferencePtr ref = _reference->changeTimeout(t);
@@ -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<EndpointPtr>& origEndpts, const vector<EndpointPtr>& 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&>(mode) = ModeSecure;
+ const_cast<Mode&>(mode) = ModeBatchOneway;
break;
}
@@ -113,6 +115,18 @@ IceInternal::Reference::Reference(const InstancePtr& inst, const string& str) :
break;
}
+ case 'D':
+ {
+ const_cast<Mode&>(mode) = ModeBatchDatagram;
+ break;
+ }
+
+ case 's':
+ {
+ const_cast<bool&>(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<string&>(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<Reference*>(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<Reference*>(this));
}
else
{
- ReferencePtr ref(new Reference(instance, identity, origEndpoints, endpoints));
- const_cast<Mode&>(ref->mode) = m;
- return ref;
+ return new Reference(instance, identity, mode, newSecure, origEndpoints, endpoints);
}
}
ReferencePtr
-IceInternal::Reference::changeEndpoints(const std::vector<EndpointPtr>& endpts) const
+IceInternal::Reference::changeEndpoints(const std::vector<EndpointPtr>& newEndpoints) const
{
- if (endpts == endpoints)
+ if (newEndpoints == endpoints)
{
return ReferencePtr(const_cast<Reference*>(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<EndpointPtr>&, const std::vector<EndpointPtr>&);
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<EndpointPtr> origEndpoints; // Original endpoints
const std::vector<EndpointPtr> 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<EndpointPtr>&) 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<const Byte*>(&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 <Ice/Properties.h>
#include <Ice/Logger.h>
#include <Ice/Functional.h>
+#include <Ice/Protocol.h>
#include <sstream>
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<Stream::Container::size_type>(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<Stream::Container::size_type>(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<Stream::Container::size_type>(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 <Ice/TraceUtil.h>
#include <Ice/Instance.h>
+#include <Ice/Object.h>
#include <Ice/TraceLevels.h>
#include <Ice/Logger.h>
#include <Ice/Stream.h>
+#include <Ice/Protocol.h>
#include <sstream>
using namespace std;
@@ -30,7 +32,35 @@ printHeader(ostream& s, Stream& stream)
s << "\nencoding version = " << static_cast<int>(encVer);
Byte type;
stream.read(type);
- s << "\nmessage type = " << static_cast<int>(type);
+ s << "\nmessage type = " << static_cast<int>(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;
@@ -82,6 +114,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<Stream&>(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<int>(status);
+ s << "\nreply status = " << static_cast<int>(status) << ' ';
+ switch(static_cast<DispatchStatus>(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();
}