00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00025 #include "NameServerClient.h"
00026 #include "../idl/Security.hh"
00027 #include "../utils/NameServer.h"
00028 #include "../idl/NameServer.hh"
00029
00030 fbfs::NameServerClient::NameServerClient(const CORBA::ORB_ptr &o, const utils::Prefs &p,
00031 const string &pri, const string &sec)
00032 : orb(o),
00033 primary(p.get("nameserver1", pri)),
00034 secondary(p.get("nameserver2", sec)) {
00035 };
00036
00037 utils::URI fbfs::NameServerClient::lookup(const fbfs::Obj_id &id) {
00038 utils::URI uri = lookup_int(id, primary);
00039 if(!uri.isValid())
00040 uri = lookup_int(id, secondary);
00041 return uri;
00042 };
00043
00044 utils::URI fbfs::NameServerClient::lookup_int(const fbfs::Obj_id &id, utils::URI uri) const {
00045 if(!uri.isValid())
00046 return utils::URI("");
00047
00048 try{
00049 CORBA::String_var dest;
00050 do {
00051 CORBA::Object_var obj = utils::NameServer::get_object(orb, uri);
00052 NameServer_var ns = NameServer::_narrow(obj);
00053 if( CORBA::is_nil(ns) )
00054 throw NotFound();
00055 dest = ns->lookup(cert, id);
00056 uri = utils::URI(string(dest));
00057 } while ( uri.isValid() && uri.service().compare("NameServer") == 0 );
00058 return uri;
00059 } catch (...) {
00060 return utils::URI("");
00061 };
00062 };