Pagina Principale   Moduli   Lista dei namespaces   Gerarchia delle classi   Lista in ordine alfabetico   Lista dei composti   Lista dei files   Membri dei namespaces   Membri dei composti   Membri dei files   Esempi  

/home/fbassi/devel/projects/reti/NameServer/NameServerClient.cc

Vai alla documentazione di questo file.
00001 /*
00002  *    FBFS Distributed Object Repository
00003  *    Copyright (C) 2001 Francesco V. Bassi
00004  *
00005  *    This program is free software; you can redistribute it and/or modify
00006  *    it under the terms of the GNU General Public License as published by
00007  *    the Free Software Foundation; either version 2 of the License, or
00008  *    (at your option) any later version.
00009  *
00010  *    This program is distributed in the hope that it will be useful,
00011  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  *    GNU General Public License for more details.
00014  *
00015  *    You should have received a copy of the GNU General Public License
00016  *    along with this program; if not, write to the Free Software
00017  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 };

Generato il Thu Feb 15 13:24:56 2001 per A Simple Distributed Object Repository with CORBA & C++. da doxygen1.2.3 scritto da Dimitri van Heesch, © 1997-2000