⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transportrules.cc

📁 编译工具
💻 CC
📖 第 1 页 / 共 2 页
字号:
private:  CORBA::ULong network_;  CORBA::ULong netmask_;  CORBA::Boolean apply_to_localhost_;};/////////////////////////////////////////////////////////////////////////////class builtinRuleType : public transportRules::RuleType {public:  builtinRuleType() {    transportRules::addRuleType((transportRules::RuleType*)this);  }  virtual ~builtinRuleType() {}  transportRules::Rule* createRule(const char* address_mask) {        CORBA::ULong network, netmask;    if ( strcmp(address_mask,"*" ) == 0 ) {      return (transportRules::Rule*) new builtinMatchAllRule(address_mask);    }    else if ( strcmp(address_mask,"localhost") == 0 ) {      return (transportRules::Rule*) new builtinLocalHostRule(address_mask);    }    else if ( parseIPv4AddressMask(address_mask,network,netmask) ) {      return (transportRules::Rule*) new builtinIPv4Rule(address_mask,							 network,							 netmask);    }    else {      return 0;    }  }  static CORBA::Boolean parseIPv4AddressMask(const char* address,					     CORBA::ULong& network,					     CORBA::ULong& netmask) {    CORBA::String_var cp(address);    char* mask = strchr((char*)cp,'/');    if (mask) {      *mask = '\0';      mask++;    }    else {      mask = (char*) "255.255.255.255";    }    if ( ! LibcWrapper::isipaddr(cp) ) return 0;    network = inet_addr((const char*)cp);    if ( ! LibcWrapper::isipaddr(mask) ) return 0;    netmask = inet_addr(mask);    return 1;  }};static builtinRuleType builtinRuleType_;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////staticCORBA::BooleanparseAndAddRuleString(omnivector<transportRules::RuleActionPair*>& ruleStore,		      const char* rule_string) {  transportRules::sequenceString action(4);  CORBA::String_var address_mask;  CORBA::Boolean reset_list = 0;  CORBA::String_var rs(rule_string);  // make a copy  // Extract address mask  char* p = rs;  while ( isspace(*p) )    p++;  char* q = p;  while ( !isspace(*p) && *p != '\0' )    p++;  if (*p == '\0')    return 0;  *p = '\0';  if ( *q == '^' ) {    reset_list = 1;    q++;    if (*q == '\0') return 0;  }  address_mask = CORBA::string_dup(q);  p++;  // Extract action list, one or more comma separated action.  // There may also be white spaces between the actions and comma separators.  while ( isspace(*p) )    p++;    q = p;    p = strchr(q,',');  while ( p && p != q ) {    *p = '\0';    char* t = q;    while ( !isspace(*t) && *t != '\0' )      t++;    *t = '\0';    action.length(action.length()+1);    action[action.length()-1] = (const char*) q;    p++;    while ( isspace(*p) )      p++;    q = p;    p = strchr(q,',');  }  if (*q == ',')    return 0;  if (*q != '\0') {    p = q;    while ( !isspace(*p) && *p != '\0' )      p++;    if (*p != '\0')      *p = '\0';    action.length(action.length()+1);    action[action.length()-1] = (const char*) q;  }  omnivector<transportRules::RuleType*>& ruletypes = *ruleTypes();  omnivector<transportRules::RuleType*>::iterator i = ruletypes.begin();  omnivector<transportRules::RuleType*>::iterator last = ruletypes.end();  while (i != last) {    transportRules::Rule* rule = (*i)->createRule(address_mask);    if (rule) {      transportRules::RuleActionPair* ra;      ra = new transportRules::RuleActionPair(rule,action);      if (reset_list) ruleStore.erase(ruleStore.begin(),ruleStore.end());      ruleStore.push_back(ra);      return 1;    }    i++;  }  return 0;}/////////////////////////////////////////////////////////////////////////////staticchar*dumpRuleString(transportRules::RuleActionPair* ra) {  transportRules::sequenceString& ss = ra->action_;  CORBA::ULong len = strlen(ra->rule_->addressMask()) + 1;  CORBA::ULong i = 0;  for (; i < ss.length(); i++) {    len += strlen(ss[i]) + 1;  }    CORBA::String_var v(CORBA::string_alloc(len));  sprintf(v,"%s ",ra->rule_->addressMask());  i = 0;  while ( i < ss.length() ) {    strcat(v,ss[i]);    i++;    if (i != ss.length()) strcat(v,",");  }  return v._retn();}/////////////////////////////////////////////////////////////////////////////class clientTransportRuleHandler : public orbOptions::Handler {public:  clientTransportRuleHandler() :     orbOptions::Handler("clientTransportRule",			"clientTransportRule = <address mask>  [action]+",			1,			"-ORBclientTransportRule \"<address mask>  [action]+\"") {}  void visit(const char* value,	     orbOptions::Source)  throw (orbOptions::BadParam) {    if (!parseAndAddRuleString(clientRules_.pd_rules,value)) {      throw orbOptions::BadParam(key(),value,"Unrecognised address mask");    }  }  void dump(orbOptions::sequenceString& result) {    omnivector<transportRules::RuleActionPair*>      ::iterator i = clientRules_.pd_rules.begin();    omnivector<transportRules::RuleActionPair*>      ::iterator last = clientRules_.pd_rules.end();    while ( i != last ) {      CORBA::String_var v;      v = dumpRuleString(*i);      orbOptions::addKVString(key(),v,result);      i++;    }  }};static clientTransportRuleHandler clientTransportRuleHandler_;/////////////////////////////////////////////////////////////////////////////class serverTransportRuleHandler : public orbOptions::Handler {public:  serverTransportRuleHandler() :     orbOptions::Handler("serverTransportRule",			"serverTransportRule = <address mask>  [action]+",			1,			"-ORBserverTransportRule \"<address mask>  [action]+\"") {}  void visit(const char* value,	     orbOptions::Source) throw (orbOptions::BadParam) {    if (!parseAndAddRuleString(serverRules_.pd_rules,value)) {      throw orbOptions::BadParam(key(),value,"Unrecognised address mask");    }  }  void dump(orbOptions::sequenceString& result) {    omnivector<transportRules::RuleActionPair*>      ::iterator i = serverRules_.pd_rules.begin();    omnivector<transportRules::RuleActionPair*>      ::iterator last = serverRules_.pd_rules.end();    while ( i != last ) {      CORBA::String_var v;      v = dumpRuleString(*i);      orbOptions::addKVString(key(),v,result);      i++;    }  }};static serverTransportRuleHandler serverTransportRuleHandler_;///////////////////////////////////////////////////////////////////////////////            Module initialiser                                           ///////////////////////////////////////////////////////////////////////////////class omni_transportRules_initialiser : public omniInitialiser {public:  omni_transportRules_initialiser() {    orbOptions::singleton().registerHandler(clientTransportRuleHandler_);    orbOptions::singleton().registerHandler(serverTransportRuleHandler_);  }  virtual ~omni_transportRules_initialiser() {    omnivector<transportRules::RuleType*>*& ruletypes = ruleTypes();    if (ruletypes) {      delete ruletypes;      ruletypes = 0;    }  }  void attach() {     if (clientRules_.pd_rules.size() == 0) {      // Add a default rule      parseAndAddRuleString(clientRules_.pd_rules,                            "*  unix,ssl,tcp");    }    if (serverRules_.pd_rules.size() == 0) {      // Add a default rule      parseAndAddRuleString(serverRules_.pd_rules,			    "* unix,ssl,tcp");    }  }  void detach() {     serverRules_.reset();    clientRules_.reset();  }};static omni_transportRules_initialiser initialiser;omniInitialiser& omni_transportRules_initialiser_ = initialiser;OMNI_NAMESPACE_END(omni)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -