#include <NameServer_i.h>
Diagramma delle classi per fbfs::NameServer_i
Membri pubblici | |
NameServer_i (utils::Prefs &prefs, const CORBA::ORB_ptr &orb) | |
Invocato al momento della creazione dell'oggetto sigleton utilizzato dal server CORBA. Continua... | |
virtual | ~NameServer_i () |
Invocato alla chiusura del server. Continua... | |
char* | lookup (const Security &cert, const Obj_id &id) throw (NotFound, SecurityException, InternalError) |
Restituisce l'URI del FileServer che gestisce l'oggetto che ha un determinato Obj_id. Continua... |
Realizza il meccanismo di gestione del sistema di nomi. Questa implementazione prevede l'utilizzo di un linguaggio di definizione delle regole di ricerca e l'utilizzo eventuale di altri NameServer.
Definizione alla linea 48 del file NameServer_i.h.
|
Invocato al momento della creazione dell'oggetto sigleton utilizzato dal server CORBA. Qui è inizializzato lo stato del server. Definizione alla linea 32 del file NameServer_i.cc. 00032 : prefs(p), orb(o) { 00033 string rulefile = p.get("rulefile","nameserver-rules"); 00034 00035 ifstream::ifstream s; 00036 s.open(rulefile.c_str()); 00037 char buf[80]; 00038 while(!s.eof()) { 00039 s.getline(buf,80); 00040 string s(buf); 00041 if(s.find("#")==0 || s.length() < 3) 00042 continue; 00043 int level = 0; 00044 while(s[level++]==' '); 00045 level--; 00046 string line = s.substr(level,s.length()-level); 00047 int i; 00048 i = line.find(" "); 00049 string command = line.substr(0,i); 00050 line = line.substr(i+1,line.length()-i-1); 00051 i = line.find(" "); 00052 string arg = line.substr(0,i); 00053 00054 Rule r(level, command, arg); 00055 rules.push_back(r); 00056 }; 00057 } |
|
Invocato alla chiusura del server.
Definizione alla linea 59 del file NameServer_i.h. 00059 {} |
|
Restituisce l'URI del FileServer che gestisce l'oggetto che ha un determinato Obj_id.
Definizione alla linea 59 del file NameServer_i.cc. 00060 { 00061 string name(id.name); 00062 string result; 00063 int level = 0; 00064 bool go_deeper = true; 00065 bool exit_now = false; 00066 vector<Rule>::iterator i; 00067 for(i=rules.begin(); i != rules.end(); i++) { 00068 if(i->level <= level || go_deeper) { 00069 level = i->level; 00070 switch( i->eval(name, result, orb) ) { 00071 case Rule::FALSE: 00072 go_deeper = false; 00073 break; 00074 case Rule::TRUE: 00075 go_deeper = true; 00076 break; 00077 case Rule::OK: 00078 return CORBA::string_dup(result.c_str()); 00079 break; 00080 case Rule::NOTFOUND: 00081 throw NotFound(); 00082 }; 00083 }; 00084 if(exit_now) 00085 break; 00086 }; 00087 throw NotFound(); 00088 } |