summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/demo/Glacier/session/config2
-rw-r--r--cpp/demo/Ice/callback/Client.cpp4
-rw-r--r--cpp/demo/Ice/callback/config10
-rw-r--r--cpp/demo/Ice/callback/config.server5
-rw-r--r--cpp/demo/Ice/hello/config2
-rw-r--r--cpp/demo/IceBox/hello/config2
-rw-r--r--cpp/doc/Properties.sgml40
-rw-r--r--cpp/src/Glacier/.depend8
-rw-r--r--cpp/src/Glacier/Blobject.cpp61
-rw-r--r--cpp/src/Glacier/Blobject.h9
-rw-r--r--cpp/src/Glacier/ClientBlobject.cpp51
-rw-r--r--cpp/src/Glacier/ClientBlobject.h3
-rw-r--r--cpp/src/Glacier/Missive.cpp106
-rw-r--r--cpp/src/Glacier/Missive.h25
-rw-r--r--cpp/src/Glacier/ServerBlobject.cpp46
-rw-r--r--cpp/src/Glacier/ServerBlobject.h3
-rw-r--r--cpp/src/Glacier/StarterI.cpp2
17 files changed, 244 insertions, 135 deletions
diff --git a/cpp/demo/Glacier/session/config b/cpp/demo/Glacier/session/config
index 28a96a27aab..2f4a14c22d4 100644
--- a/cpp/demo/Glacier/session/config
+++ b/cpp/demo/Glacier/session/config
@@ -9,7 +9,7 @@ IceSSL.Client.CertPath=../../../certs
IceSSL.Client.Config=sslconfig.xml
IceSSL.Server.CertPath=../../../certs
IceSSL.Server.Config=sslconfig.xml
-#IceSSL.Trace.Security=4
+#IceSSL.Trace.Security=1
Glacier.Router.Endpoints=default
Glacier.Router.SessionManager=HelloSessionManager:tcp -p 10000:ssl -p 10001
diff --git a/cpp/demo/Ice/callback/Client.cpp b/cpp/demo/Ice/callback/Client.cpp
index 1f8cf7b2c16..82d926d84a3 100644
--- a/cpp/demo/Ice/callback/Client.cpp
+++ b/cpp/demo/Ice/callback/Client.cpp
@@ -107,7 +107,7 @@ CallbackClient::run(int argc, char* argv[])
else if (c == 'O')
{
Context context;
- context["_fwd"] = "o" + secureStr;
+ context["_fwd"] = "O" + secureStr;
batchOneway->initiateCallback(onewayR, context);
}
else if (c == 'd')
@@ -119,7 +119,7 @@ CallbackClient::run(int argc, char* argv[])
else if (c == 'D')
{
Context context;
- context["_fwd"] = "d" + secureStr;
+ context["_fwd"] = "D" + secureStr;
batchDatagram->initiateCallback(datagramR, context);
}
else if (c == 'f')
diff --git a/cpp/demo/Ice/callback/config b/cpp/demo/Ice/callback/config
index 451eb54486a..af5e066343e 100644
--- a/cpp/demo/Ice/callback/config
+++ b/cpp/demo/Ice/callback/config
@@ -1,16 +1,16 @@
Callback.Callback=callback:tcp -p 10000:udp -p 10000:ssl -p 10001
Ice.Adapter.CallbackReceiverAdapter.Endpoints=tcp:udp:ssl
-Ice.Trace.Network=1
-Ice.Trace.Protocol=1
+#Ice.Trace.Network=1
+#Ice.Trace.Protocol=1
Ice.ConnectionWarnings=1
Ice.Plugin.IceSSL=IceSSL:create
-IceSSL.Trace.Security=1
IceSSL.Client.CertPath=../../../certs
IceSSL.Client.Config=sslconfig.xml
IceSSL.Server.CertPath=../../../certs
IceSSL.Server.Config=sslconfig.xml
+#IceSSL.Trace.Security=1
Glacier.Router.Endpoints=default -p 10005
Glacier.Router.Client.Endpoints=tcp:udp -c:ssl
@@ -18,6 +18,10 @@ Glacier.Router.Server.Endpoints=tcp:udp:ssl
Glacier.Router.Trace.Client=2
Glacier.Router.Trace.Server=2
Glacier.Router.Trace.RoutingTable=1
+Glacier.Router.Server.ForwardContext=1
+Glacier.Router.Client.ForwardContext=1
+Glacier.Router.Server.BatchSleepTime=2000
+Glacier.Router.Client.BatchSleepTime=2000
# Uncomment the following lines if you want to run this demo with Glacier
Ice.Default.Router=Glacier/router:default -p 10005
diff --git a/cpp/demo/Ice/callback/config.server b/cpp/demo/Ice/callback/config.server
index ed632afd5d9..d33b8c73dad 100644
--- a/cpp/demo/Ice/callback/config.server
+++ b/cpp/demo/Ice/callback/config.server
@@ -1,7 +1,7 @@
Ice.Adapter.CallbackAdapter.Endpoints=tcp -p 10000:udp -p 10000:ssl -p 10001
-Ice.Trace.Network=1
-Ice.Trace.Protocol=1
+#Ice.Trace.Network=1
+#Ice.Trace.Protocol=1
Ice.ConnectionWarnings=1
Ice.Plugin.IceSSL=IceSSL:create
@@ -9,3 +9,4 @@ IceSSL.Client.CertPath=../../../certs
IceSSL.Client.Config=sslconfig.xml
IceSSL.Server.CertPath=../../../certs
IceSSL.Server.Config=sslconfig.xml
+#IceSSL.Trace.Security=1
diff --git a/cpp/demo/Ice/hello/config b/cpp/demo/Ice/hello/config
index 40e29751253..f7b6e327fc0 100644
--- a/cpp/demo/Ice/hello/config
+++ b/cpp/demo/Ice/hello/config
@@ -41,7 +41,7 @@ Ice.ConnectionWarnings=1
# 1 = trace warning messages
# 2 = config file parsing warnings
#
-#Ice.Trace.Security=4
+#Ice.Trace.Security=2
#
# SSL Configuration File
diff --git a/cpp/demo/IceBox/hello/config b/cpp/demo/IceBox/hello/config
index 0a38457477a..10b5e7dbe4e 100644
--- a/cpp/demo/IceBox/hello/config
+++ b/cpp/demo/IceBox/hello/config
@@ -63,7 +63,7 @@ IceSSL.Server.Config=sslconfig.xml
# 1 = trace warning messages
# 2 = config file parsing warnings
#
-#IceSSL.Trace.Security=4
+#IceSSL.Trace.Security=2
#
# Glacier settings
diff --git a/cpp/doc/Properties.sgml b/cpp/doc/Properties.sgml
index a4cac8547e6..1b65853351c 100644
--- a/cpp/doc/Properties.sgml
+++ b/cpp/doc/Properties.sgml
@@ -1047,6 +1047,24 @@ The routing table tracing level:
</section>
</section>
+<section><title>Glacier.Router.Client.ForwardContext, Glacier.Router.Server.ForwardContext</title>
+<section><title>Synopsis</title>
+<synopsis>
+Glacier.Router.Client.ForwardContext=<replaceable>num</replaceable>
+Glacier.Router.Server.ForwardContext=<replaceable>num</replaceable>
+</synopsis>
+</section>
+<section>
+<title>Description</title>
+<para>
+If <replaceable>num</replaceable> is set to a value larger than zero,
+the context parameter is forwarded unmodified as received from the
+client or server, respectively. Otherwise an empty context is
+forwarded. Default is no context forwarding.
+</para>
+</section>
+</section>
+
<section><title>Glacier.Router.SessionManager</title>
<section><title>Synopsis</title>
<synopsis>
@@ -1056,9 +1074,8 @@ Glacier.Router.SessionManager=<replaceable>proxy</replaceable>
<section>
<title>Description</title>
<para>
-A stringified proxy to the session manager interface. If not specified,
-it is not possible to use the <literal>Router::createSession</literal>
-method.
+A stringified proxy to a session manager. If not specified, it is not
+possible to use the <literal>Router::createSession()</literal> method.
</para>
</section>
</section>
@@ -1072,7 +1089,9 @@ Glacier.Router.UserId=<replaceable>name</replaceable>
<section>
<title>Description</title>
<para>
-The authenticated userId of the remote user.
+The authenticated user id. This is usually passed from the &Glacier;
+router starter. The user id is used as argument to
+<literal>Router::createSession()</literal>.
</para>
</section>
</section>
@@ -1086,9 +1105,9 @@ Glacier.Router.AllowCategories=<replaceable>list</replaceable>
<section>
<title>Description</title>
<para>
-A whitespace seperated list of categories. If this property is set
-then requests are only permitted to identities with a category found
-in this list.
+A whitespace seperated list of categories. If this property is set,
+then requests are only permitted to &Ice; objects with an identity
+that matches one of the categories from this list.
</para>
</section>
</section>
@@ -1216,8 +1235,9 @@ Glacier.Starter.AddUserToAllowCategories=<replaceable>value</replaceable>
<section>
<title>Description</title>
<para>
-If present the userId is added to the
-<literal>Glacier.Router.AllowCategories</literal> property.
+If set, the user id authenticated by the &Glacier; router starter is
+added to the <literal>Glacier.Router.AllowCategories</literal>
+property upon router startup.
</para>
</section>
</section>
@@ -1468,7 +1488,7 @@ The &Freeze; evictor activity tracing level:
</row>
<row>
<entry>1</entry>
-<entry>Trace Ice Object creation and destruction, as well as
+<entry>Trace &Ice; object creation and destruction, as well as
evictor deactivation.</entry>
</row>
<row>
diff --git a/cpp/src/Glacier/.depend b/cpp/src/Glacier/.depend
index 443492e10d8..0719b738763 100644
--- a/cpp/src/Glacier/.depend
+++ b/cpp/src/Glacier/.depend
@@ -2,9 +2,11 @@ Starter.o: Starter.cpp ../../include/Glacier/Starter.h ../../include/Ice/LocalOb
Router.o: Router.cpp ../../include/Glacier/Router.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h
Session.o: Session.cpp ../../include/Glacier/Session.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h
SessionManager.o: SessionManager.cpp ../../include/Glacier/SessionManager.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Glacier/SessionF.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h
-GlacierRouter.o: GlacierRouter.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/RoutingTable.h ../../include/Ice/RoutingTableF.h ../Glacier/RouterI.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Glacier/SessionManagerF.h ../Glacier/ClientBlobject.h ../Glacier/ServerBlobject.h ../../include/Glacier/SessionManager.h ../../include/IceUtil/Base64.h ../../include/IceSSL/CertificateVerifierF.h ../../include/IceSSL/Plugin.h ../../include/Ice/Plugin.h
+GlacierRouter.o: GlacierRouter.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/RoutingTable.h ../../include/Ice/RoutingTableF.h ../Glacier/RouterI.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Glacier/SessionManagerF.h ../Glacier/ClientBlobject.h ../Glacier/Blobject.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h ../Glacier/ServerBlobject.h ../../include/Glacier/SessionManager.h ../../include/IceUtil/Base64.h ../../include/IceSSL/CertificateVerifierF.h ../../include/IceSSL/Plugin.h ../../include/Ice/Plugin.h
RouterI.o: RouterI.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/RouterI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Glacier/SessionManagerF.h ../../include/Glacier/Session.h ../../include/Glacier/SessionManager.h
-ClientBlobject.o: ClientBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Glacier/ClientBlobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h
-ServerBlobject.o: ServerBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/ServerBlobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h
+Blobject.o: Blobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h
+ClientBlobject.o: ClientBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Glacier/ClientBlobject.h ../Glacier/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h
+ServerBlobject.o: ServerBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/ServerBlobject.h ../Glacier/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h
+Missive.o: Missive.cpp ../Glacier/Missive.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IceUtil/Thread.h
GlacierStarter.o: GlacierStarter.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../Glacier/StarterI.h ../../include/IceSSL/RSACertificateGen.h ../../include/IceSSL/RSAKeyPairF.h ../../include/Glacier/Starter.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h
StarterI.o: StarterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../../include/IceSSL/RSAKeyPair.h ../../include/IceUtil/Shared.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/IceSSL/RSAKeyPairF.h ../../include/IceSSL/RSACertificateGenF.h ../../include/IceSSL/RSAPrivateKeyF.h ../../include/IceSSL/RSAPublicKeyF.h ../Glacier/StarterI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IceSSL/RSACertificateGen.h ../../include/Glacier/Starter.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h
diff --git a/cpp/src/Glacier/Blobject.cpp b/cpp/src/Glacier/Blobject.cpp
index bbbfdfbc365..ca3c123dbe1 100644
--- a/cpp/src/Glacier/Blobject.cpp
+++ b/cpp/src/Glacier/Blobject.cpp
@@ -17,7 +17,7 @@ using namespace Glacier;
Glacier::Blobject::Blobject(const CommunicatorPtr& communicator) :
_communicator(communicator),
- _logger(_communicator->getLogger())
+ _logger(communicator->getLogger())
{
}
@@ -49,6 +49,63 @@ Glacier::Blobject::destroy()
}
+bool
+Glacier::Blobject::invoke(ObjectPrx& proxy, const vector<Byte>& inParams, vector<Byte>& outParams,
+ const Current& current)
+{
+ try
+ {
+ MissiveQueuePtr missiveQueue = modifyProxy(proxy, current);
+
+ if (missiveQueue) // Batch routing?
+ {
+ missiveQueue->add(new Missive(proxy, inParams, current, _forwardContext));
+ return true;
+ }
+ else // Regular routing.
+ {
+ if (_traceLevel >= 2)
+ {
+ Trace out(_logger, "Glacier");
+ if (reverse())
+ {
+ out << "reverse ";
+ }
+ out << "routing to:\n"
+ << "proxy = " << _communicator->proxyToString(proxy) << '\n'
+ << "operation = " << current.operation << '\n'
+ << "nonmutating = " << (current.nonmutating ? "true" : "false");
+ }
+
+ if (_forwardContext)
+ {
+ return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams, current.context);
+ }
+ else
+ {
+ return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams);
+ }
+ }
+ }
+ catch (const Exception& ex)
+ {
+ if (_traceLevel >= 1)
+ {
+ Trace out(_logger, "Glacier");
+ if (reverse())
+ {
+ out << "reverse ";
+ }
+ out << "routing exception:\n" << ex;
+ }
+
+ ex.ice_throw();
+ }
+
+ assert(false);
+ return true; // To keep the compiler happy.
+}
+
MissiveQueuePtr
Glacier::Blobject::modifyProxy(ObjectPrx& proxy, const Current& current)
{
@@ -129,7 +186,7 @@ Glacier::Blobject::getMissiveQueue()
IceUtil::Mutex::Lock lock(_missiveQueueMutex);
if (!_missiveQueue)
{
- _missiveQueue = new MissiveQueue;
+ _missiveQueue = new MissiveQueue(_communicator, _traceLevel, reverse(), _batchSleepTime);
_missiveQueueControl = _missiveQueue->start();
}
return _missiveQueue;
diff --git a/cpp/src/Glacier/Blobject.h b/cpp/src/Glacier/Blobject.h
index 836db558d0f..3c362e771c0 100644
--- a/cpp/src/Glacier/Blobject.h
+++ b/cpp/src/Glacier/Blobject.h
@@ -23,15 +23,22 @@ public:
Blobject(const Ice::CommunicatorPtr&);
virtual ~Blobject();
+
+ virtual bool reverse() = 0;
void destroy();
- virtual MissiveQueuePtr modifyProxy(Ice::ObjectPrx&, const Ice::Current&);
+ bool invoke(Ice::ObjectPrx&, const std::vector<Ice::Byte>&, std::vector<Ice::Byte>&, const Ice::Current&);
+ MissiveQueuePtr modifyProxy(Ice::ObjectPrx&, const Ice::Current&);
protected:
Ice::CommunicatorPtr _communicator;
Ice::LoggerPtr _logger;
+ int _traceLevel;
+ bool _forwardContext;
+ IceUtil::Time _batchSleepTime;
+
private:
MissiveQueuePtr getMissiveQueue();
diff --git a/cpp/src/Glacier/ClientBlobject.cpp b/cpp/src/Glacier/ClientBlobject.cpp
index d9df798fc38..118c394b4b4 100644
--- a/cpp/src/Glacier/ClientBlobject.cpp
+++ b/cpp/src/Glacier/ClientBlobject.cpp
@@ -25,6 +25,9 @@ Glacier::ClientBlobject::ClientBlobject(const CommunicatorPtr& communicator,
{
PropertiesPtr properties = _communicator->getProperties();
_traceLevel = properties->getPropertyAsInt("Glacier.Router.Trace.Client");
+ _forwardContext = properties->getPropertyAsInt("Glacier.Router.Client.ForwardContext") > 0;
+ _batchSleepTime = IceUtil::Time::milliSeconds(
+ properties->getPropertyAsIntWithDefault("Glacier.Router.Client.BatchSleepTime", 250));
const string ws = " \t";
string::size_type current = allowCategories.find_first_not_of(ws, 0);
@@ -40,6 +43,12 @@ Glacier::ClientBlobject::ClientBlobject(const CommunicatorPtr& communicator,
_allowCategories.erase(unique(_allowCategories.begin(), _allowCategories.end()), _allowCategories.end());
}
+bool
+Glacier::ClientBlobject::reverse()
+{
+ return false;
+}
+
void
Glacier::ClientBlobject::destroy()
{
@@ -75,43 +84,13 @@ Glacier::ClientBlobject::ice_invoke(const vector<Byte>& inParams, vector<Byte>&
}
}
- try
- {
- ObjectPrx proxy = _routingTable->get(current.identity);
-
- if (!proxy)
- {
- ObjectNotExistException ex(__FILE__, __LINE__);
- ex.identity = current.identity;
- throw ex;
- }
-
- MissiveQueuePtr missiveQueue = modifyProxy(proxy, current);
- assert(!missiveQueue);
-
- if (_traceLevel >= 2)
- {
- Trace out(_logger, "Glacier");
- out << "routing to:\n"
- << "proxy = " << _communicator->proxyToString(proxy) << '\n'
- << "operation = " << current.operation << '\n'
- << "nonmutating = " << (current.nonmutating ? "true" : "false");
- }
-
- // TODO: Should we forward the context? Perhaps a config parameter?
- return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams, current.context);
- }
- catch (const Exception& ex)
+ ObjectPrx proxy = _routingTable->get(current.identity);
+ if (!proxy)
{
- if (_traceLevel >= 1)
- {
- Trace out(_logger, "Glacier");
- out << "routing exception:\n" << ex;
- }
-
- ex.ice_throw();
+ ObjectNotExistException ex(__FILE__, __LINE__);
+ ex.identity = current.identity;
+ throw ex;
}
- assert(false);
- return true; // To keep the compiler happy.
+ return invoke(proxy, inParams, outParams, current);
}
diff --git a/cpp/src/Glacier/ClientBlobject.h b/cpp/src/Glacier/ClientBlobject.h
index 2242f564720..cb866f6a4ac 100644
--- a/cpp/src/Glacier/ClientBlobject.h
+++ b/cpp/src/Glacier/ClientBlobject.h
@@ -23,12 +23,13 @@ public:
ClientBlobject(const Ice::CommunicatorPtr&, const IceInternal::RoutingTablePtr&, const std::string&);
+ virtual bool reverse();
+
void destroy();
virtual bool ice_invoke(const std::vector<Ice::Byte>&, std::vector<Ice::Byte>&, const Ice::Current&);
private:
- int _traceLevel;
IceInternal::RoutingTablePtr _routingTable;
std::vector<std::string> _allowCategories;
};
diff --git a/cpp/src/Glacier/Missive.cpp b/cpp/src/Glacier/Missive.cpp
index 6faedc57426..3f489da15aa 100644
--- a/cpp/src/Glacier/Missive.cpp
+++ b/cpp/src/Glacier/Missive.cpp
@@ -14,20 +14,27 @@ using namespace std;
using namespace Ice;
using namespace Glacier;
-Glacier::Missive::Missive(const ObjectPrx& proxy, const vector<Byte>& inParams, const Current& current) :
+Glacier::Missive::Missive(const ObjectPrx& proxy, const vector<Byte>& inParams, const Current& current,
+ bool forwardContext) :
_proxy(proxy),
_inParams(inParams),
- _current(current)
+ _current(current),
+ _forwardContext(forwardContext)
{
}
-ObjectPrx
+void
Glacier::Missive::invoke()
{
- // TODO: Should we forward the context? Perhaps a config parameter?
std::vector<Byte> dummy;
- _proxy->ice_invoke(_current.operation, _current.nonmutating, _inParams, dummy, _current.context);
- return _proxy;
+ if (_forwardContext)
+ {
+ _proxy->ice_invoke(_current.operation, _current.nonmutating, _inParams, dummy, _current.context);
+ }
+ else
+ {
+ _proxy->ice_invoke(_current.operation, _current.nonmutating, _inParams, dummy);
+ }
}
bool
@@ -36,7 +43,24 @@ Glacier::Missive::override(const MissivePtr& missive)
return false;
}
-Glacier::MissiveQueue::MissiveQueue() :
+const ObjectPrx&
+Glacier::Missive::getProxy() const
+{
+ return _proxy;
+}
+
+const Current&
+Glacier::Missive::getCurrent() const
+{
+ return _current;
+}
+
+Glacier::MissiveQueue::MissiveQueue(const Ice::CommunicatorPtr& communicator, int traceLevel, bool reverse,
+ const IceUtil::Time& _sleepTime) :
+ _communicator(communicator),
+ _logger(communicator->getLogger()),
+ _traceLevel(traceLevel),
+ _reverse(reverse),
_destroy(false)
{
}
@@ -45,6 +69,7 @@ Glacier::MissiveQueue::~MissiveQueue()
{
assert(_destroy);
assert(_missives.empty());
+ assert(!_communicator);
}
void
@@ -54,6 +79,8 @@ Glacier::MissiveQueue::destroy()
_destroy = true;
_missives.clear();
+ _communicator = 0;
+ _logger = 0;
notify();
}
@@ -110,20 +137,40 @@ Glacier::MissiveQueue::run()
{
try
{
- proxies.push_back((*p)->invoke());
+ const ObjectPrx& proxy = (*p)->getProxy();
+ const Current& current = (*p)->getCurrent();
+
+ if (_traceLevel >= 2)
+ {
+ Trace out(_logger, "Glacier");
+ if (_reverse)
+ {
+ out << "reverse ";
+ }
+ out << "batch routing to:\n"
+ << "proxy = " << _communicator->proxyToString(proxy) << '\n'
+ << "operation = " << current.operation << '\n'
+ << "nonmutating = " << (current.nonmutating ? "true" : "false");
+ }
+
+ (*p)->invoke();
+ proxies.push_back(proxy);
}
catch (const Ice::Exception& ex)
{
- //
- // Remember exception and destroy the missive queue.
- //
- _destroy = true;
- _missives.clear();
- _exception = std::auto_ptr<Ice::Exception>(ex.ice_clone());
- return;
+ if (_traceLevel >= 1)
+ {
+ Trace out(_logger, "Glacier");
+ if (_reverse)
+ {
+ out << "reverse ";
+ }
+ out << "batch routing exception:\n" << ex;
+ }
}
- _missives.clear();
}
+
+ _missives.clear();
}
//
@@ -136,8 +183,8 @@ Glacier::MissiveQueue::run()
//
// This sends all batched missives.
//
- sort(proxies.begin(), proxies.end());
- proxies.erase(unique(proxies.begin(), proxies.end()), proxies.end());
+// sort(proxies.begin(), proxies.end());
+// proxies.erase(unique(proxies.begin(), proxies.end()), proxies.end());
vector<ObjectPrx>::const_iterator p;
for (p = proxies.begin(); p != proxies.end(); ++p)
{
@@ -148,21 +195,24 @@ Glacier::MissiveQueue::run()
// In order to avoid flooding the missive receivers, we add
// a delay between sending missives.
//
- // TODO: Configurable.
- //
- IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(250));
+ if (_sleepTime > IceUtil::Time())
+ {
+ IceUtil::ThreadControl::sleep(_sleepTime);
+ }
}
catch (const Ice::Exception& ex)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this);
- //
- // Remember exception and destroy the missive queue.
- //
- _destroy = true;
- _missives.clear();
- _exception = std::auto_ptr<Ice::Exception>(ex.ice_clone());
- return;
+ if (_traceLevel >= 1)
+ {
+ Trace out(_logger, "Glacier");
+ if (_reverse)
+ {
+ out << "reverse ";
+ }
+ out << "batch routing exception:\n" << ex;
+ }
}
}
}
diff --git a/cpp/src/Glacier/Missive.h b/cpp/src/Glacier/Missive.h
index ba72fa26aac..7090ec5897b 100644
--- a/cpp/src/Glacier/Missive.h
+++ b/cpp/src/Glacier/Missive.h
@@ -25,16 +25,19 @@ class Missive : virtual public IceUtil::Shared
{
public:
- Missive(const Ice::ObjectPrx&, const std::vector<Ice::Byte>&, const Ice::Current&);
+ Missive(const Ice::ObjectPrx&, const std::vector<Ice::Byte>&, const Ice::Current&, bool);
- virtual Ice::ObjectPrx invoke();
- virtual bool override(const MissivePtr&);
+ void invoke();
+ bool override(const MissivePtr&);
+ const Ice::ObjectPrx& getProxy() const;
+ const Ice::Current& getCurrent() const;
private:
- const Ice::ObjectPrx _proxy;
- const std::vector<Ice::Byte>& _inParams;
+ Ice::ObjectPrx _proxy;
+ std::vector<Ice::Byte> _inParams;
Ice::Current _current;
+ bool _forwardContext;
};
class MissiveQueue;
@@ -44,7 +47,7 @@ class MissiveQueue : virtual public IceUtil::Thread, IceUtil::Monitor<IceUtil::M
{
public:
- MissiveQueue();
+ MissiveQueue(const Ice::CommunicatorPtr&, int, bool, const IceUtil::Time&);
virtual ~MissiveQueue();
void destroy();
@@ -52,11 +55,15 @@ public:
virtual void run();
-protected:
+private:
+
+ Ice::CommunicatorPtr _communicator;
+ Ice::LoggerPtr _logger;
+ int _traceLevel;
+ bool _reverse;
+ IceUtil::Time _sleepTime;
- Ice::ObjectPrx _proxy;
std::vector<MissivePtr> _missives;
- std::auto_ptr<Ice::Exception> _exception;
bool _destroy;
};
diff --git a/cpp/src/Glacier/ServerBlobject.cpp b/cpp/src/Glacier/ServerBlobject.cpp
index 6f9c0f74064..7ffb82f700d 100644
--- a/cpp/src/Glacier/ServerBlobject.cpp
+++ b/cpp/src/Glacier/ServerBlobject.cpp
@@ -16,11 +16,20 @@ using namespace Ice;
using namespace Glacier;
Glacier::ServerBlobject::ServerBlobject(const ObjectAdapterPtr& clientAdapter) :
- Glacier::Blobject(_clientAdapter->getCommunicator()),
+ Glacier::Blobject(clientAdapter->getCommunicator()),
_clientAdapter(clientAdapter)
{
PropertiesPtr properties = _communicator->getProperties();
_traceLevel = properties->getPropertyAsInt("Glacier.Router.Trace.Server");
+ _forwardContext = properties->getPropertyAsInt("Glacier.Router.Server.ForwardContext") > 0;
+ _batchSleepTime = IceUtil::Time::milliSeconds(
+ properties->getPropertyAsIntWithDefault("Glacier.Router.Server.BatchSleepTime", 250));
+}
+
+bool
+Glacier::ServerBlobject::reverse()
+{
+ return true;
}
void
@@ -39,37 +48,8 @@ Glacier::ServerBlobject::ice_invoke(const vector<Byte>& inParams, vector<Byte>&
{
assert(_clientAdapter); // Destroyed?
- try
- {
- ObjectPrx proxy = _clientAdapter->createReverseProxy(current.identity);
- assert(proxy);
-
- MissiveQueuePtr missiveQueue = modifyProxy(proxy, current);
- assert(!missiveQueue);
-
- if (_traceLevel >= 2)
- {
- Trace out(_logger, "Glacier");
- out << "reverse routing to:\n"
- << "proxy = " << _communicator->proxyToString(proxy) << '\n'
- << "operation = " << current.operation << '\n'
- << "nonmutating = " << (current.nonmutating ? "true" : "false");
- }
-
- // TODO: Should we forward the context? Perhaps a config parameter?
- return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams, current.context);
- }
- catch (const Exception& ex)
- {
- if (_traceLevel >= 1)
- {
- Trace out(_logger, "Glacier");
- out << "reverse routing exception:\n" << ex;
- }
-
- ex.ice_throw();
- }
+ ObjectPrx proxy = _clientAdapter->createReverseProxy(current.identity);
+ assert(proxy);
- assert(false);
- return true; // To keep the compiler happy.
+ return invoke(proxy, inParams, outParams, current);
}
diff --git a/cpp/src/Glacier/ServerBlobject.h b/cpp/src/Glacier/ServerBlobject.h
index 7b800b4059f..d28ac9e9515 100644
--- a/cpp/src/Glacier/ServerBlobject.h
+++ b/cpp/src/Glacier/ServerBlobject.h
@@ -22,13 +22,14 @@ public:
ServerBlobject(const Ice::ObjectAdapterPtr&);
+ virtual bool reverse();
+
void destroy();
virtual bool ice_invoke(const std::vector<Ice::Byte>&, std::vector<Ice::Byte>&, const Ice::Current&);
private:
Ice::ObjectAdapterPtr _clientAdapter;
- int _traceLevel;
};
}
diff --git a/cpp/src/Glacier/StarterI.cpp b/cpp/src/Glacier/StarterI.cpp
index a8eef0ca0f8..1763e844336 100644
--- a/cpp/src/Glacier/StarterI.cpp
+++ b/cpp/src/Glacier/StarterI.cpp
@@ -192,7 +192,7 @@ Glacier::StarterI::startRouter(const string& userId, const string& password, Byt
if (!_properties->getProperty("Glacier.Starter.AddUserToAllowCategories").empty())
{
args.push_back("--Glacier.Router.AllowCategories=" +
- _properties->getProperty("Glacier.Router.AllowCategories") + string(" ") + userId);
+ _properties->getProperty("Glacier.Router.AllowCategories") + " " + userId);
}
ostringstream s;