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

📄 orboptionsreg.cc

📁 编译工具
💻 CC
字号:
// -*- Mode: C++; -*-//                            Package   : omniORB// orbOptionsReg.cc           Created on: 17/8/2001//                            Author    : Sai Lai Lo (sll)////    Copyright (C) 2001 AT&T Laboratories Cambridge////    This file is part of the omniORB library////    The omniORB library is free software; you can redistribute it and/or//    modify it under the terms of the GNU Library General Public//    License as published by the Free Software Foundation; either//    version 2 of the License, or (at your option) any later version.////    This library is distributed in the hope that it will be useful,//    but WITHOUT ANY WARRANTY; without even the implied warranty of//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU//    Library General Public License for more details.////    You should have received a copy of the GNU Library General Public//    License along with this library; if not, write to the Free//    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA//    02111-1307, USA////// Description://	*** PROPRIETORY INTERFACE ***///*  $Log: orbOptionsReg.cc,v $  Revision 1.1.2.12  2004/03/05 17:26:22  dgrisby  Typo in registry reading code.  Revision 1.1.2.11  2003/08/21 14:57:52  dgrisby  Really silly bug broke registry reading on Windows.  Revision 1.1.2.10  2003/05/22 14:51:37  dgrisby  Fix registry code.  Revision 1.1.2.9  2003/01/22 11:43:52  dgrisby  Minor error message fixes in registry code.  Revision 1.1.2.8  2002/07/03 15:46:40  dgrisby  Minor registry code bugfix.  Revision 1.1.2.7  2002/03/18 15:13:09  dpg1  Fix bug with old-style ORBInitRef in config file; look for  -ORBtraceLevel arg before anything else; update Windows registry  key. Correct error message.  Revision 1.1.2.6  2002/03/11 12:21:07  dpg1  ETS things.  Revision 1.1.2.5  2001/08/21 11:02:18  sll  orbOptions handlers are now told where an option comes from. This  is necessary to process DefaultInitRef and InitRef correctly.  Revision 1.1.2.4  2001/08/20 16:39:19  dpg1  Correct spelling mistake :-)  Revision 1.1.2.3  2001/08/20 15:38:56  sll  Multi-options, such as endPoint, InitRef are support in NT registry.  Revision 1.1.2.2  2001/08/20 10:43:28  sll  New orb configuration parsing now works with NT registry.  Revision 1.1.2.1  2001/08/20 08:19:24  sll  Read the new ORB configuration file format. Can still read old format.  Can also set configuration parameters from environment variables.*/#include <omniORB4/CORBA.h>#include <orbOptions.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <winreg.h>#define NEW_REGKEY  "SOFTWARE\\omniORB"#define OLD_REGKEY1 "SOFTWARE\\ATT\\omniORB"#define OLD_REGKEY2 "SOFTWARE\\ORL\\omniORB\\2.0"OMNI_NAMESPACE_BEGIN(omni)static void parseConfigReg(orbOptions& opt, HKEY rootkey);static void parseOldConfigReg(orbOptions& opt, HKEY rootkey);CORBA::BooleanorbOptions::importFromRegistry() throw (orbOptions::Unknown,					orbOptions::BadParam) {  char* rootregname;  HKEY  rootkey;  rootregname = NEW_REGKEY;  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,rootregname,0,		   KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,		   &rootkey) == ERROR_SUCCESS) {    try {      parseConfigReg(*this,rootkey);      RegCloseKey(rootkey);    }    catch (orbOptions::Unknown& ex) {      RegCloseKey(rootkey);      throw;    }    catch (orbOptions::BadParam& ex) {      RegCloseKey(rootkey);      throw;    }    return 1;  }  rootregname = OLD_REGKEY1;  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,rootregname,0,		   KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,		   &rootkey) == ERROR_SUCCESS) {    try {      parseConfigReg(*this,rootkey);      RegCloseKey(rootkey);    }    catch (orbOptions::Unknown& ex) {      RegCloseKey(rootkey);      throw;    }    catch (orbOptions::BadParam& ex) {      RegCloseKey(rootkey);      throw;    }    return 1;  }  rootregname = OLD_REGKEY2;  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,rootregname,0,		   KEY_QUERY_VALUE,&rootkey) == ERROR_SUCCESS) {    try {      parseOldConfigReg(*this,rootkey);      RegCloseKey(rootkey);    }    catch (orbOptions::Unknown& ex) {      RegCloseKey(rootkey);      throw;    }    catch (orbOptions::BadParam& ex) {      RegCloseKey(rootkey);      throw;    }    return 1;  }  return 0;}#define KEYBUFSIZE   128#define VALUEBUFSIZE 2048staticCORBA::Boolean getRegEntry(HKEY rootkey, DWORD index,			   char* keybuf, DWORD keybufsize,			   char* valuebuf, DWORD valuebufsize,			   char*& key, char*& value) {  DWORD keylen   = keybufsize;  DWORD valuelen = valuebufsize;  DWORD valuetype;  if (RegEnumValue(rootkey,index,		   (LPTSTR) ((char*)keybuf),&keylen,NULL,		   &valuetype,		   (LPBYTE) ((char*)valuebuf), &valuelen) !=  ERROR_SUCCESS)    return 0;  if (valuetype != REG_SZ) {    if ( omniORB::trace(1) ) {      omniORB::logger log;      log << "Error reading configuration data in the registry.\n"	  << "Reason: value is not of type REG_SZ\n";    }    throw orbOptions::Unknown("<missing>","<missing>");  }  char* p;  p = keybuf;  while ( isspace(*p) )    p++;  key = p;  if (*p != '\0') {    p += strlen(key) - 1;    while ( isspace(*p) )      p--;    *(++p) = '\0';  }  p = valuebuf;  while ( isspace(*p) )    p++;  value = p;  if (*p != '\0') {    p += strlen(value) - 1;    while ( isspace(*p) )      p--;    *(++p) = '\0';  }  return 1;}staticvoidparseConfigInSubKey(orbOptions& opt, HKEY rootkey, char* subkeyname) {  HKEY subkey;  if (RegOpenKeyEx(rootkey,subkeyname,0,                   KEY_QUERY_VALUE,&subkey) == ERROR_SUCCESS) {    try {      DWORD total;      DWORD keybufsize;      DWORD valuebufsize;      CORBA::String_var keybuf;      CORBA::String_var valuebuf;      RegQueryInfoKey(subkey,NULL,NULL,NULL,NULL,NULL,NULL,		      &total,&keybufsize,&valuebufsize,NULL,NULL);      if (total) {	keybuf = CORBA::string_alloc(keybufsize);	valuebuf = CORBA::string_alloc(valuebufsize);      }      DWORD index = 0;      while (index < total) {	char* key;	char* value;        if (!getRegEntry(subkey,index,                         keybuf,keybufsize+1,                         valuebuf,valuebufsize+1,			 key,value)) {          return;	}        opt.addOption(subkeyname,value,orbOptions::fromRegistry);        index++;      }      RegCloseKey(subkey);    }    catch (orbOptions::Unknown& ex) {      RegCloseKey(subkey);      throw;    }    catch (orbOptions::BadParam& ex) {      RegCloseKey(subkey);      throw;    }  }}staticvoid parseConfigReg(orbOptions& opt, HKEY rootkey) {  DWORD total;  DWORD totalsubkeys;  DWORD keybufsize;  DWORD valuebufsize;  DWORD subkeybufsize;  CORBA::String_var keybuf;  CORBA::String_var valuebuf;  CORBA::String_var subkeybuf;    RegQueryInfoKey(rootkey,NULL,NULL,NULL,&totalsubkeys,&subkeybufsize,NULL,		  &total,&keybufsize,&valuebufsize,NULL,NULL);  if (total) {    keybuf = CORBA::string_alloc(keybufsize);    valuebuf = CORBA::string_alloc(valuebufsize);  }  if (totalsubkeys)    subkeybuf = CORBA::string_alloc(subkeybufsize);  DWORD index = 0;  while (index < total) {    char* key;    char* value;    if (!getRegEntry(rootkey,index,                     keybuf,keybufsize+1,                     valuebuf,valuebufsize+1,		     key,value)) {      return;    }    opt.addOption(key,value,orbOptions::fromRegistry);    index++;  }  index = 0;  while (index < totalsubkeys) {    DWORD subkeylen = subkeybufsize + 1;    if ( RegEnumKeyEx(rootkey,index,		      (LPTSTR) ((char*)subkeybuf),&subkeylen,		      NULL,NULL,NULL,NULL) == ERROR_SUCCESS ) {      parseConfigInSubKey(opt,rootkey,subkeybuf);    }    else {      if (omniORB::trace(1)) {	omniORB::logger log;	log << "Cannot read subkey name for index " << index << "\n";      }    }    index++;  }}staticvoidoldconfig_warning(const char* key, const char* newkey) {  if (omniORB::trace(2)) {    omniORB::logger log;    log << "Warning: translated (" << key << ") to (" << newkey << ")\n";  }}staticvoid parseOldConfigReg(orbOptions& opt, HKEY rootkey) {  DWORD total;  DWORD keybufsize;  DWORD valuebufsize;  CORBA::String_var keybuf;  CORBA::String_var valuebuf;  RegQueryInfoKey(rootkey,NULL,NULL,NULL,NULL,NULL,NULL,		  &total,&keybufsize,&valuebufsize,NULL,NULL);  if (total) {    keybuf = CORBA::string_alloc(keybufsize);    valuebuf = CORBA::string_alloc(valuebufsize);  }  if (omniORB::trace(1)) {    omniORB::logger l;    l << "Warning: the registry entries are in the old pre-omniORB4 format.\n";  }  if (omniORB::trace(2)) {    omniORB::logger l;    l << "For the moment this is accepted to maintain backward compatibility.\n"      << "omniORB: Please update to the new registry format ASAP.\n";  }  DWORD index = 0;  while (index < total) {    char* key;    char* value;    if (!getRegEntry(rootkey,index,                     keybuf,keybufsize+1,                     valuebuf,valuebufsize+1,		     key,value))      return;    if (strcmp(key,"ORBInitRef") == 0) {      oldconfig_warning("ORBInitRef","InitRef");      opt.addOption(key+3,value,orbOptions::fromRegistry);    }    else if (strcmp(key,"ORBDefaultInitRef") == 0) {      oldconfig_warning("ORBDefaultInitRef","DefaultInitRef");      opt.addOption(key+3,value,orbOptions::fromRegistry);    }    else if (strcmp(key,"NAMESERVICE") == 0) {      oldconfig_warning("NAMESERVICE","InitRef NameService=");      const char* format = "NameService=%s";      CORBA::String_var v(CORBA::string_alloc(strlen(value)+strlen(format)));      sprintf(v,format,value);      opt.addOption("InitRef",v,orbOptions::fromRegistry);    }    else if (strcmp(key,"INTERFACE_REPOSITORY") == 0) {      oldconfig_warning("INTERFACE_REPOSITORY","InitRef InterfaceRepository=");      const char* format = "InterfaceRepository=%s";      CORBA::String_var v(CORBA::string_alloc(strlen(value)+strlen(format)));      sprintf(v,format,value);      opt.addOption("InitRef",v,orbOptions::fromRegistry);    }    else if (strcmp(key,"ORBInitialHost") == 0) {      oldconfig_warning("ORBInitialHost","bootstrapAgentHostname");      opt.addOption("bootstrapAgentHostname",value,orbOptions::fromRegistry);    }    else if (strcmp(key,"ORBInitialPort") == 0) {      oldconfig_warning("ORBInitialPort","bootstrapAgentPort");      opt.addOption("bootstrapAgentPort",value,orbOptions::fromRegistry);    }    else if (strcmp(key,"GATEKEEPER_ALLOWFILE") == 0) {      oldconfig_warning("GATEKEEPER_ALLOWFILE","ignored");    }    else if (strcmp(key,"GATEKEEPER_DENYFILE") == 0) {      oldconfig_warning("GATEKEEPER_DENYFILE","ignored");    }    else {      throw orbOptions::Unknown(key,value);    }    index++;  }}OMNI_NAMESPACE_END(omni)

⌨️ 快捷键说明

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