X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=shibsp%2Fremoting%2Fimpl%2FListenerService.cpp;h=2b1cd620bd582831a9068cc4610c276ee54786fb;hb=b757a2480a021c4183ee6dba77d4470adbf95ef8;hp=814db967f2befa16ade3a5c5a5c783e544668fa0;hpb=163c5e045d4375e2c9cd1d2fdb13455db5d94362;p=shibboleth%2Fsp.git diff --git a/shibsp/remoting/impl/ListenerService.cpp b/shibsp/remoting/impl/ListenerService.cpp index 814db96..2b1cd62 100644 --- a/shibsp/remoting/impl/ListenerService.cpp +++ b/shibsp/remoting/impl/ListenerService.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Internet2 + * Copyright 2001-2010 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -66,7 +66,7 @@ ListenerService::~ListenerService() Remoted* ListenerService::regListener(const char* address, Remoted* listener) { - Remoted* ret=NULL; + Remoted* ret=nullptr; map::const_iterator i=m_listenerMap.find(address); if (i!=m_listenerMap.end()) ret=i->second; @@ -92,7 +92,7 @@ bool ListenerService::unregListener(const char* address, Remoted* current, Remot Remoted* ListenerService::lookup(const char *address) const { map::const_iterator i=m_listenerMap.find(address); - return (i==m_listenerMap.end()) ? NULL : i->second; + return (i==m_listenerMap.end()) ? nullptr : i->second; } void ListenerService::receive(DDF &in, ostream& out) @@ -100,15 +100,20 @@ void ListenerService::receive(DDF &in, ostream& out) if (!in.name()) throw ListenerException("Incoming message with no destination address rejected."); else if (!strcmp("ping",in.name())) { - DDF outmsg=DDF(NULL).integer(in.integer() + 1); + DDF outmsg=DDF(nullptr).integer(in.integer() + 1); DDFJanitor jan(outmsg); out << outmsg; } - Locker locker(SPConfig::getConfig().getServiceProvider()); - Remoted* dest=lookup(in.name()); - if (!dest) - throw ListenerException("No destination registered for incoming message addressed to ($1).",params(1,in.name())); + // Two stage lookup, on the listener itself, and the SP interface. + ServiceProvider* sp = SPConfig::getConfig().getServiceProvider(); + Locker locker(sp); + Remoted* dest = lookup(in.name()); + if (!dest) { + dest = sp->lookupListener(in.name()); + if (!dest) + throw ListenerException("No destination registered for incoming message addressed to ($1).", params(1,in.name())); + } dest->receive(in, out); }