summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBrent Eagles <brent@zeroc.com>2006-04-18 12:04:30 +0000
committerBrent Eagles <brent@zeroc.com>2006-04-18 12:04:30 +0000
commit4bcb8a567b993a377453b29192a6c02498d0799c (patch)
treeeee9cd590719a98dd985be9cf45b5d2b7049c8ae /cpp/src
parentFix build error with MSVC 6. (diff)
downloadice-4bcb8a567b993a377453b29192a6c02498d0799c.tar.bz2
ice-4bcb8a567b993a377453b29192a6c02498d0799c.tar.xz
ice-4bcb8a567b993a377453b29192a6c02498d0799c.zip
enabling build of regex test on Windows
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Glacier2/RouterI.cpp2
-rw-r--r--cpp/src/Glacier2/RoutingTable.cpp31
-rw-r--r--cpp/src/Glacier2/RoutingTable.h2
3 files changed, 24 insertions, 11 deletions
diff --git a/cpp/src/Glacier2/RouterI.cpp b/cpp/src/Glacier2/RouterI.cpp
index aade55cc31d..4e1b7a51744 100644
--- a/cpp/src/Glacier2/RouterI.cpp
+++ b/cpp/src/Glacier2/RouterI.cpp
@@ -142,7 +142,7 @@ Glacier2::RouterI::addProxies(const ObjectProxySeq& proxies, const Current& curr
_timestamp = IceUtil::Time::now();
- return _routingTable->add(proxies);
+ return _routingTable->add(proxies, current);
}
string
diff --git a/cpp/src/Glacier2/RoutingTable.cpp b/cpp/src/Glacier2/RoutingTable.cpp
index 22d5b4d4d1b..485e03cc17f 100644
--- a/cpp/src/Glacier2/RoutingTable.cpp
+++ b/cpp/src/Glacier2/RoutingTable.cpp
@@ -22,28 +22,41 @@ Glacier2::RoutingTable::RoutingTable(const CommunicatorPtr& communicator) :
}
ObjectProxySeq
-Glacier2::RoutingTable::add(const ObjectProxySeq& proxies)
+Glacier2::RoutingTable::add(const ObjectProxySeq& proxies, const Ice::Current& current)
{
IceUtil::Mutex::Lock sync(*this);
-
- ObjectProxySeq evictedProxies;
+
+ ObjectProxySeq::const_iterator prx;
- for(ObjectProxySeq::const_iterator prx = proxies.begin(); prx != proxies.end(); ++prx)
+ //
+ // We 'pre-scan' the list, applying our validation rules. The
+ // ensures that our state is not modified if this operation results
+ // in a rejection.
+ //
+ for(prx = proxies.begin(); prx != proxies.end(); ++prx)
{
if(!*prx) // We ignore null proxies.
{
continue;
}
- ObjectPrx proxy = (*prx)->ice_twoway()->ice_secure(false); // We add proxies in default form.
+ if(!_verifier.verify(*prx))
+ {
+ current.con->close(true);
+ throw ObjectNotExistException(__FILE__, __LINE__);
+ }
+ }
- if(!_verifier.verify(proxy))
+ ObjectProxySeq evictedProxies;
+ for(prx = proxies.begin(); prx != proxies.end(); ++prx)
+ {
+ if(!*prx) // We ignore null proxies.
{
- //
- // XXX - handle rejection here!
- //
+ continue;
}
+ ObjectPrx proxy = (*prx)->ice_twoway()->ice_secure(false); // We add proxies in default form.
+
EvictorMap::iterator p = _map.find(proxy->ice_getIdentity());
if(p == _map.end())
diff --git a/cpp/src/Glacier2/RoutingTable.h b/cpp/src/Glacier2/RoutingTable.h
index 6e9ec844d86..816ae360f61 100644
--- a/cpp/src/Glacier2/RoutingTable.h
+++ b/cpp/src/Glacier2/RoutingTable.h
@@ -27,7 +27,7 @@ public:
RoutingTable(const Ice::CommunicatorPtr&);
- Ice::ObjectProxySeq add(const Ice::ObjectProxySeq&); // Returns evicted proxies.
+ Ice::ObjectProxySeq add(const Ice::ObjectProxySeq&, const Ice::Current&); // Returns evicted proxies.
Ice::ObjectPrx get(const Ice::Identity&); // Returns null if no proxy can be found.
private: