ior.cc

来自「编译工具」· CC 代码 · 共 1,411 行 · 第 1/3 页

CC
1,411
字号
  // skip version  s.skipInput(2);  // skip address & port  len <<= s;  s.skipInput(len);  port <<= s;  len <<= s; // Get object key length  if (s.readOnly()) {    CORBA::Octet* p = (CORBA::Octet*)((omni::ptr_arith_t)s.bufPtr() +				      s.currentInputPtr());    key.replace(len,len,p,0);  }  else {    // If the cdrEncapsulationStream had to copy the profile data, we    // have to copy it _again_ here, otherwise it will be out of scope    // before the key is used.    key.length(len);    s.get_octet_array(key.NP_data(), len);  }}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////voidomniIOR::unmarshal_TAG_ORB_TYPE(const IOP::TaggedComponent& c , omniIOR& ior){  OMNIORB_ASSERT(c.tag == IOP::TAG_ORB_TYPE);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  CORBA::ULong v;  v <<= e;  ior.getIORInfo()->orbType(v);}char*omniIOR::dump_TAG_ORB_TYPE(const IOP::TaggedComponent& c){  OMNIORB_ASSERT(c.tag == IOP::TAG_ORB_TYPE);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  CORBA::ULong orb_type;  orb_type <<= e;  CORBA::String_var outstr;  CORBA::ULong len = sizeof("TAG_ORB_TYPE") + 1;  if (orb_type == omniORB_TAG_ORB_TYPE) {    len += sizeof("omniORB");    outstr = CORBA::string_alloc(len);    strcpy(outstr,"TAG_ORB_TYPE omniORB");  }  else {    len += 16;    outstr = CORBA::string_alloc(len);    sprintf(outstr,"%s 0x%08lx","TAG_ORB_TYPE",(unsigned long)orb_type);  }  return outstr._retn();}voidomniIOR::unmarshal_TAG_ALTERNATE_IIOP_ADDRESS(const IOP::TaggedComponent& c , omniIOR& ior){  OMNIORB_ASSERT(c.tag == IOP::TAG_ALTERNATE_IIOP_ADDRESS);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  IIOP::Address v;  v.host = e.unmarshalRawString();  v.port <<= e;  giopAddress* address = giopAddress::fromTcpAddress(v);  if (address == 0) return;  ior.getIORInfo()->addresses().push_back(address);}char*omniIOR::dump_TAG_ALTERNATE_IIOP_ADDRESS(const IOP::TaggedComponent& c){  OMNIORB_ASSERT(c.tag == IOP::TAG_ALTERNATE_IIOP_ADDRESS);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  IIOP::Address v;  v.host = e.unmarshalRawString();  v.port <<= e;  CORBA::String_var outstr;  CORBA::ULong len = sizeof("TAG_ALTERNATE_IIOP_ADDRESS ")+strlen(v.host)+8;  outstr = CORBA::string_alloc(len);  sprintf(outstr,"%s %s %d","TAG_ALTERNATE_IIOP_ADDRESS",(const char*)v.host,	  v.port);  return outstr._retn();}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////voidomniIOR::unmarshal_TAG_GROUP(const IOP::TaggedComponent& c , omniIOR& ior){  OMNIORB_ASSERT(c.tag == IOP::TAG_GROUP);#if 0  // XXX Temporarily disabled.  ior.pd_is_IOGR = 1;#endif#if 0  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  GIOP::Version ftsvc_ver;  CORBA::FT::FTDomainId ftdom_id;  CORBA::FT::ObjectGroupId objgrp_id;  CORBA::FT::ObjectGroupRefVersion objgrp_ver;  ftsvc_ver <<= e;  ftdom_id <<= e;  objgrp_id <<= e;  objgrp_ver <<= e;  // XXX STORE IN EXTRA INFO PART OF IOR#endif}char*omniIOR::dump_TAG_GROUP(const IOP::TaggedComponent& c){  OMNIORB_ASSERT(c.tag == IOP::TAG_GROUP);#if 0  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  GIOP::Version ftsvc_ver;  CORBA::FT::FTDomainId ftdom_id;  CORBA::FT::ObjectGroupId objgrp_id;  CORBA::FT::ObjectGroupRefVersion objgrp_ver;  ftsvc_ver <<= e;  ftdom_id <<= e;  objgrp_id <<= e;  objgrp_ver <<= e;  // XXX Format everything into a string#endif  CORBA::String_var outstr((const char*)"TAG_GROUP");  return outstr._retn();}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////voidomniIOR::unmarshal_TAG_SSL_SEC_TRANS(const IOP::TaggedComponent& c ,				     omniIOR& ior) {  OMNIORB_ASSERT(c.tag == IOP::TAG_SSL_SEC_TRANS);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  CORBA::UShort target_supports,target_requires, port;  try {    switch (c.component_data.length()) {      // Remember this is an encapsulation, so the length includes the      // first endian octet plus the necessary paddings after it    case 8:      {	// This is the standard format	target_supports <<= e;	target_requires <<= e;	port <<= e;	break;      }    default:      {	omniORB::logs(1," decode TAG_SSL_SEC_TRANS "		      "WARNING: Wrong component size, attempt to decode it as the Visibroker non-compilant format");	CORBA::ULong v;	v <<= e; target_supports = v;	v <<= e; target_requires = v;	port <<= e;	break;      }    }  }  catch (...) {    omniORB::logs(1," decode TAG_SSL_SEC_TRANS "		  "WARNING: fail to decode the component. The format neither conforms to the standard or is visibroker proprietory.");    return;  }  giopAddressList& addresses = ior.getIORInfo()->addresses();  // The first address in the list is the host port combo stored in the  // IOR's address field. We have to copy the host name from there.  const char* tcpaddr = 0;  giopAddressList::iterator i, last;  i    = addresses.begin();  last = addresses.end();  for (; i != last; i++) {    if (omni::strMatch((*i)->type(),"giop:tcp")) {      tcpaddr = (*i)->address();      break;    }  }  if (tcpaddr == 0) return;  const char* host = strchr(tcpaddr,':') + 1; host = strchr(host,':') + 1;  CORBA::ULong hostlen = strchr(host,':') - host;  CORBA::String_var copyhost(CORBA::string_alloc(hostlen));  strncpy(copyhost,host,hostlen);  ((char*)copyhost)[hostlen] = '\0';  IIOP::Address ssladdr;  ssladdr.host = copyhost._retn();  ssladdr.port = port;  giopAddress* address = giopAddress::fromSslAddress(ssladdr);  // If we do not have ssl transport linked the return value will be 0  if (address == 0) return;  ior.getIORInfo()->addresses().push_back(address);}char*omniIOR::dump_TAG_SSL_SEC_TRANS(const IOP::TaggedComponent& c) {  OMNIORB_ASSERT(c.tag == IOP::TAG_SSL_SEC_TRANS);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  CORBA::UShort target_supports,target_requires, port;  CORBA::Boolean is_visi = 0;  CORBA::String_var outstr;  try {    switch (c.component_data.length()) {      // Remember this is an encapsulation, so the length includes the      // first endian octet plus the necessary paddings after it    case 8:      {	// This is the standard format	target_supports <<= e;	target_requires <<= e;	port <<= e;	break;      }    default:      {	// Try visibroker propriety format	CORBA::ULong v;	v <<= e; target_supports = v;	v <<= e; target_requires = v;	port <<= e;	is_visi = 1;	break;      }    }    const char* format = "TAG_SSL_SEC_TRANS port = %d supports = %d requires = %d";    const char* visiformat = " (visibroker format)";    outstr = CORBA::string_alloc(strlen(format)+strlen(visiformat)+36);    sprintf(outstr,format,port,target_supports,target_requires);    if (is_visi) strcat(outstr,visiformat);  }  catch (...) {    outstr = (const char*)"TAG_SSL_SEC_TRANS (non-standard and unknown format)";  }  return outstr._retn();}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////voidomniIOR::unmarshal_TAG_OMNIORB_BIDIR(const IOP::TaggedComponent& c ,				     omniIOR& ior) {    OMNIORB_ASSERT(c.tag == IOP::TAG_OMNIORB_BIDIR);  OMNIORB_ASSERT(ior.pd_iorInfo);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  char* sendfrom = e.unmarshalRawString();  BiDirInfo* info = new BiDirInfo(sendfrom);    omniIOR::IORExtraInfoList& infolist = ior.pd_iorInfo->extraInfo();  CORBA::ULong index = infolist.length();  infolist.length(index+1);  infolist[index] = (omniIOR::IORExtraInfo*)info;}char*omniIOR::dump_TAG_OMNIORB_BIDIR(const IOP::TaggedComponent& c) {  OMNIORB_ASSERT(c.tag == IOP::TAG_OMNIORB_BIDIR);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  CORBA::String_var sendfrom;  sendfrom = e.unmarshalRawString();  CORBA::String_var outstr;  CORBA::ULong len = sizeof("TAG_OMNIORB_BIDIR ")+strlen(sendfrom);  outstr = CORBA::string_alloc(len);  sprintf(outstr,"%s %s","TAG_OMNIORB_BIDIR",(const char*)sendfrom);  return outstr._retn();}voidomniIOR::add_TAG_OMNIORB_BIDIR(const char* sendfrom,omniIOR& ior) {  cdrEncapsulationStream s(CORBA::ULong(0),CORBA::Boolean(1));  s.marshalRawString(sendfrom);  IOP::MultipleComponentProfile body;  body.length(1);  body[0].tag = IOP::TAG_OMNIORB_BIDIR;  CORBA::Octet* p; CORBA::ULong max,len; s.getOctetStream(p,max,len);  body[0].component_data.replace(max,len,p,1);  CORBA::ULong index = ior.pd_iopProfiles->length();  ior.pd_iopProfiles->length(index+1);  IIOP::encodeMultiComponentProfile(body,ior.pd_iopProfiles[index]);}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////voidomniIOR::unmarshal_TAG_OMNIORB_UNIX_TRANS(const IOP::TaggedComponent& c ,					  omniIOR& ior) {    OMNIORB_ASSERT(c.tag == IOP::TAG_OMNIORB_UNIX_TRANS);  OMNIORB_ASSERT(ior.pd_iorInfo);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  CORBA::String_var host;  host = e.unmarshalRawString();  CORBA::String_var filename;  filename = e.unmarshalRawString();  // Check if we are on the same host and hence can use unix socket.  char self[64];  if (gethostname(&self[0],64) == RC_SOCKET_ERROR) {    self[0] = '\0';    omniORB::logs(1, "Cannot get the name of this host.");  }  if (strcmp(self,host) != 0) return;  const char* format = "giop:unix:%s";  CORBA::ULong len = strlen(filename);  if (len == 0) return;  len += strlen(format);  CORBA::String_var addrstr(CORBA::string_alloc(len));  sprintf(addrstr,format,(const char*)filename);    giopAddress* address = giopAddress::str2Address(addrstr);  // If we do not have unix transport linked the return value will be 0  if (address == 0) return;  ior.getIORInfo()->addresses().push_back(address);}char*omniIOR::dump_TAG_OMNIORB_UNIX_TRANS(const IOP::TaggedComponent& c) {  OMNIORB_ASSERT(c.tag == IOP::TAG_OMNIORB_UNIX_TRANS);  cdrEncapsulationStream e(c.component_data.get_buffer(),			   c.component_data.length(),1);  CORBA::String_var host;  host = e.unmarshalRawString();  CORBA::String_var filename;  filename = e.unmarshalRawString();  const char* format = "TAG_OMNIORB_UNIX_TRANS %s %s";  CORBA::String_var outstr;  CORBA::ULong len = strlen(format) + strlen(host) + strlen(filename);  outstr = CORBA::string_alloc(len);  sprintf(outstr,format,(const char*)host,(const char*)filename);  return outstr._retn();}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////voidomniIOR::unmarshal_TAG_OMNIORB_PERSISTENT_ID(const IOP::TaggedComponent& c,					     omniIOR& ior){  OMNIORB_ASSERT(c.tag == IOP::TAG_OMNIORB_PERSISTENT_ID);  CORBA::ULong len = orbParameters::persistentId.length();  if (len && len == c.component_data.length()) {    const CORBA::Octet* a = c.component_data.get_buffer();    const CORBA::Octet* b = orbParameters::persistentId.get_buffer();    for (CORBA::ULong i=0; i < len; i++) {      if (*a++ != *b++)	return;    }        omniIOR::IORExtraInfoList& extra = ior.pd_iorInfo->extraInfo();    CORBA::ULong index = extra.length();    extra.length(index+1);    extra[index] = new IORExtraInfo(IOP::TAG_OMNIORB_PERSISTENT_ID);  }}char*omniIOR::dump_TAG_OMNIORB_PERSISTENT_ID(const IOP::TaggedComponent& c){  OMNIORB_ASSERT(c.tag == IOP::TAG_OMNIORB_PERSISTENT_ID);  const char* prefix = "TAG_OMNIORB_PERSISTENT_ID ";  CORBA::String_var outstr;  CORBA::ULong prefix_len = strlen(prefix);  outstr = CORBA::string_alloc(prefix_len + c.component_data.length() * 2);  strcpy((char*)outstr, prefix);  char* o = (char*)outstr + prefix_len;  int d, n;  for (CORBA::ULong i=0; i < c.component_data.length(); i++) {    d = c.component_data[i];    n = (d & 0xf0) >> 4;    if (n >= 10)      *o++ = 'a' + n - 10;    else      *o++ = '0' + n;    n = d & 0xf;    if (n >= 10)      *o++ = 'a' + n - 10;    else      *o++ = '0' + n;  }  *o = '\0';  return outstr._retn();}static voidlogPersistentIdentifier(){  omniORB::logger l;  l << "Persistent server identifier: ";  int c, n;  for (CORBA::ULong i=0; i < orbParameters::persistentId.length(); i++) {    c = orbParameters::persistentId[i];    n = (c & 0xf0) >> 4;    if (n >= 10)      l << (char)('a' + n - 10);    else      l << (char)('0' + n);    n = c & 0xf;    if (n >= 10)      l << (char)('a' + n - 10);    else      l << (char)('0' + n);  }  l << "\n";}  

⌨️ 快捷键说明

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