Project

General

Profile

オブジェクトリファレンスとIPアドレスについて

エンドポイントが変化したときにオブジェクトリファレンスにIPアドレスが埋め込まれていると到達不可能になる問題を解決したい。

corba.endpoints

corba.endpoints: all などとすると、すべてのインターフェースのアドレスがオブジェクトリファレンスに埋め込まれる。
ただし、1番目以降のIPアドレスは TAG_ALTERNATE_IIOP_ADDRESS というタグに埋め込まれるので、Javaなどでは接続に時間がかかる。

IOR: IOR:010000003500000049444c3a6f70656e72746d2e616973742e676f2e6a702f4f70656e52544d2f44617461466c6f77436f6d706f6e656e743a312e300000000001000000000000008800000001010200100000003139322e3136382e3232302e313831003da800000e000000fe5dc45352000038b1000000000400000300000000000000080000000100000000545441010000001c000000010000000100010001000000010001050901010001000000090101000300000018000000010000000e0000003135302e32392e39392e313936003da8
IOR information
  Type ID: "IDL:openrtm.aist.go.jp/OpenRTM/DataFlowComponent:1.0" 
  Profiles:
    1. IIOP 1.2 192.168.220.181 43069
       POA(root)        Object Key: "...." = 0x00000004  (4 bytes)
       Object Key: ".].SR..8......" = 0xfe5dc45352000038b10000000004  (14 bytes)
       TAG_ORB_TYPE omniORB
       TAG_CODE_SETS char native code set: ISO-8859-1
                     char conversion code set: UTF-8
                     wchar native code set: UTF-16
                     wchar conversion code set: UTF-16

       TAG_ALTERNATE_IIOP_ADDRESS 150.29.99.196 43069

OMNIORB_USEHOSTNAME

環境変数 OMNIORB_USEHOSTNAME をセットすると、たとえ corba.endpoints: all が指定されていても、セットされたホスト名のみがIORに埋め込まれる。

IOR: IOR:010000003500000049444c3a6f70656e72746d2e616973742e676f2e6a702f4f70656e52544d2f44617461466c6f77436f6d706f6e656e743a312e3000000000010000000000000064000000010102000d0000007562756e74752e6c6f63616c00007fa80e000000fec2c45352000038d3000000000400000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
IOR information
  Type ID: "IDL:openrtm.aist.go.jp/OpenRTM/DataFlowComponent:1.0" 
  Profiles:
    1. IIOP 1.2 ubuntu.local 43135
       POA(root)        Object Key: "...." = 0x00000004  (4 bytes)
       Object Key: "...SR..8......" = 0xfec2c45352000038d30000000004  (14 bytes)
       TAG_ORB_TYPE omniORB
       TAG_CODE_SETS char native code set: ISO-8859-1
                     char conversion code set: UTF-8
                     wchar native code set: UTF-16
                     wchar conversion code set: UTF-16

この辺の設定は、omniObjAdapter::initialize() の以下の部分で行われている。

   if ( !options.endpoints.empty() ) {

      Options::EndpointURIList::iterator i = options.endpoints.begin();
      for ( ; i != options.endpoints.end(); i++ ) {

        CORBA::Boolean ok = instantiate_endpoint((*i)->uri,
                                                 (*i)->no_publish,
                                                 listening_endpoints);
        if (!ok) {
          if (omniORB::trace(1)) {
            omniORB::logger log;
            log << "Error: Unable to create an endpoint of this description: " 
                << (const char*)(*i)->uri
                << "\n";
          }
          OMNIORB_THROW(INITIALIZE,INITIALIZE_TransportError,
                        CORBA::COMPLETED_NO);
        }
      }
    }
    else {
      // instantiate a default tcp port.
      const char* hostname = getenv(OMNIORB_USEHOSTNAME_VAR);
      if( !hostname )  hostname = "";

      CORBA::String_var estr = omniURI::buildURI("giop:tcp:", hostname, 0);

      CORBA::Boolean ok = instantiate_endpoint(estr, 0, listening_endpoints);

      if (!ok) {
        if (omniORB::trace(1)) {
          omniORB::logger log;
          log << "Error: Unable to create an endpoint of this description: " 
              << (const char*)estr
              << "\n";
        }
        OMNIORB_THROW(INITIALIZE,INITIALIZE_TransportError,
                      CORBA::COMPLETED_NO);
      }
    }