#include <Rule.h>
Tipi pubblici | |
enum | evalresult { FALSE, TRUE, OK, NOTFOUND } |
enum | commands { COM_MATCH, COM_RESOLV, COM_NOTFOUND, COM_TRUE, COM_OK, COM_FALSE, COM_LOG, COM_RANDOM, COM_EXTERN, COM_UNKNOWN } |
Membri pubblici | |
Rule (int level, const string &command, const string &arv) | |
evalresult | eval (const string &id, string &result, const CORBA::ORB_ptr &o) |
Attributi pubblici | |
int | level |
int | command |
string | arg |
|
Definizione alla linea 41 del file Rule.h. 00041 {COM_MATCH, COM_RESOLV, COM_NOTFOUND, COM_TRUE, COM_OK, COM_FALSE, COM_LOG, COM_RANDOM, COM_EXTERN, COM_UNKNOWN} |
|
Definizione alla linea 40 del file Rule.h. 00040 {FALSE, TRUE, OK, NOTFOUND} |
|
Definizione alla linea 35 del file Rule.cc. 00035 : level(l), arg(a) { 00036 if(com.compare("MATCH") == 0) command = COM_MATCH; 00037 else if(com.compare("RESOLV") == 0) command = COM_RESOLV; 00038 else if(com.compare("OK") == 0) command = COM_OK; 00039 else if(com.compare("NOTFOUND") == 0) command = COM_NOTFOUND; 00040 else if(com.compare("FALSE") == 0) command = COM_FALSE; 00041 else if(com.compare("TRUE") == 0) command = COM_TRUE; 00042 else if(com.compare("LOG") == 0) command = COM_LOG; 00043 else if(com.compare("RANDOM") == 0) command = COM_RANDOM; 00044 else if(com.compare("EXTERN") == 0) command = COM_EXTERN; 00045 else command = COM_UNKNOWN; 00046 } |
|
Definizione alla linea 48 del file Rule.cc. 00048 { 00049 //cout << "Eval:: command:" << command << " arg:" << arg << " level:" << level << "\n"; 00050 switch(command) { 00051 case COM_FALSE: 00052 return FALSE; 00053 case COM_NOTFOUND: 00054 return NOTFOUND; 00055 case COM_OK: 00056 result = arg; 00057 return OK; 00058 case COM_LOG: 00059 cerr << "Log: [Name=" << id << "] " << arg << "\n"; 00060 return TRUE; 00061 case COM_TRUE: 00062 return TRUE; 00063 case COM_RANDOM: 00064 if( (atof(arg.c_str()) * rand()) / RAND_MAX <= 1 ) 00065 return TRUE; 00066 return FALSE; 00067 case COM_MATCH: 00068 regex_t rex; 00069 if(regcomp(&rex, arg.c_str(), 0)!=0) { 00070 cerr << "Log: [Name=" << id << "] Regular Expression error\n"; 00071 return FALSE; 00072 } 00073 if( regexec(&rex, id.c_str(), 0, NULL,0) == 0 ) { 00074 regfree(&rex); 00075 return TRUE; 00076 } 00077 regfree(&rex); 00078 return FALSE; 00079 case COM_RESOLV: 00080 try { 00081 utils::URI uri(arg); 00082 CORBA::Object_var obj = utils::NameServer::get_object(orb, uri); 00083 NameServer_var nameserver = NameServer::_narrow(obj); 00084 Obj_id ident; 00085 ident.name = CORBA::string_dup(id.c_str()); 00086 Security cert; 00087 CORBA::String_var value = nameserver->lookup(cert, ident); 00088 result = string(value); 00089 return OK; 00090 } catch (...) {} 00091 return FALSE; 00092 case COM_EXTERN: 00093 // Migliorare affinché sia possibile passare il parametro id e 00094 // leggere la stringa di risultato in caso di OK. 00095 if(!system(arg.c_str())) 00096 return TRUE; 00097 return FALSE; 00098 default: 00099 cerr << "Log: [Name=" << id << "] Unknown Command Executed\n"; 00100 return FALSE; 00101 }; 00102 } |
|
|
|
|
|
|