diff options
Diffstat (limited to 'TAO/utils/catior/catior.cpp')
-rw-r--r-- | TAO/utils/catior/catior.cpp | 95 |
1 files changed, 94 insertions, 1 deletions
diff --git a/TAO/utils/catior/catior.cpp b/TAO/utils/catior/catior.cpp index b00019c826f..636ffd2d7d2 100644 --- a/TAO/utils/catior/catior.cpp +++ b/TAO/utils/catior/catior.cpp @@ -18,6 +18,7 @@ // // ============================================================================ +#include "ace/Codeset_Registry.h" #include "ace/Get_Opt.h" #include "ace/streams.h" #include "tao/corba.h" @@ -828,6 +829,98 @@ cat_object_key (TAO_InputCDR& stream) return cat_octet_seq ("Object Key", stream); } +ACE_CString + _find_info (CORBA::ULong id) +{ + ACE_CString locale=""; + ACE_Codeset_Registry::registry_to_locale(id, locale, NULL, NULL); + return locale; +} + +void displayHex( TAO_InputCDR &str ) +{ + if (str.good_bit () == 0 ) + return; + + TAO_InputCDR clone_str( str ); + CORBA::ULong theSetId ; + str.read_ulong(theSetId); + ACE_DEBUG ((LM_DEBUG," Hex - %x", theSetId)); + ACE_DEBUG ((LM_DEBUG," Description - ")); + ACE_CString theDescr = _find_info ( theSetId ); + + if( theDescr.length() == 0 ) + { + ACE_DEBUG ((LM_DEBUG," Unknown CodeSet \n ")); + return; + } + + ACE_DEBUG (( LM_DEBUG," %s \n", theDescr.c_str())); +} + +static CORBA::Boolean +cat_codeset_info(TAO_InputCDR& stream) +{ + // Component Length + CORBA::ULong compLen=0L; + stream >> compLen; + ACE_DEBUG ((LM_DEBUG, "\tComponent Length %u \n", compLen)); + + // Byte Order + CORBA::ULong byteOrder; + stream >> byteOrder; + + if( byteOrder ) + { + ACE_DEBUG ((LM_DEBUG, + "\tThe Component Byte Order:\tLittle Endian\n")); + } + else + ACE_DEBUG ((LM_DEBUG, + "\tThe Component Byte Order:\tBig Endian\n")); + + // CodesetId for char + // CORBA::ULong c_ncsId; + ACE_DEBUG ((LM_DEBUG, "\tNative CodeSet for char: ")); + displayHex( stream ); + + // number of Conversion Codesets for char + CORBA::ULong c_ccslen=0; + stream >> c_ccslen; + ACE_DEBUG ((LM_DEBUG, "\tNumber of CCS for char %u \n", c_ccslen)); + + if( c_ccslen ) + ACE_DEBUG ((LM_DEBUG, "\tConversion Codesets for char are: \n")); + + // Loop through and display them + for( CORBA::ULong index=0; index < c_ccslen; ++index) + { + // CodesetId for char + ACE_DEBUG ((LM_DEBUG, "\t%u) ", index + 1L)); + displayHex( stream ); + } + + // CodesetId for wchar + ACE_DEBUG ((LM_DEBUG, "\tNative CodeSet for wchar: ")); + displayHex( stream ); + + // number of Conversion Codesets for char + CORBA::ULong w_ccslen=0; + stream >> w_ccslen; + ACE_DEBUG ((LM_DEBUG, "\tNumber of CCS for wchar %u \n", w_ccslen)); + + if( w_ccslen ) + ACE_DEBUG ((LM_DEBUG, "\tConversion Codesets for wchar are: \n")); + + // Loop through and display them + for( CORBA::ULong index=0; index < w_ccslen; ++index) + { + ACE_DEBUG ((LM_DEBUG, "\t %u) ", index + 1L)); + displayHex( stream ); + } + return 1; +} + static CORBA::Boolean cat_tagged_components (TAO_InputCDR& stream) { @@ -854,7 +947,7 @@ cat_tagged_components (TAO_InputCDR& stream) } else if (tag == IOP::TAG_CODE_SETS) { ACE_DEBUG ((LM_DEBUG,"%d (TAG_CODE_SETS)\n", tag)); ACE_DEBUG ((LM_DEBUG, "%{%{")); - cat_octet_seq ("Component Value" ,stream); + cat_codeset_info(stream); ACE_DEBUG ((LM_DEBUG, "%}%}")); } else if (tag == IOP::TAG_ALTERNATE_IIOP_ADDRESS) { |