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 + -
显示快捷键?